android零宽空格,特殊字符的问题—零宽空格

一、问题

在使用mpdf生成pdf文件的时候,出现了一个异常,在一个字符串后面,莫名了多了一个乱码符号:

04ec8cc3051d52d3820bcebdedc318a0.png

但是在页面上看这个数据,是正常的:

0c51748d2897d958311dd3687244d889.png

查看其它的同类型数据,都是好的,唯独这个数据有问题。

二、原因

在将那条数据复制粘贴到编辑器中观察发现,当删除这个字符串的时候,删除一下的时候,并不能直接删除最后一个数字,得删除两下才能删掉最后一个数字,也就是说,这个字符串后面实际有一个我们看不到的字符。

查了一下资料之后,得知有一个零宽空格的符号。

零宽度字符是1个Unicode字符,Unicode编码是U+200B,UTF-8编码是E2 80 8B。

零宽度字符是不可见的非打印字符,它用于打断长英文单词或长阿拉伯数字,以便于换行显示,否则长英文单词和长阿拉伯数字会越过盒模型的边界。

所以上面问题的原因就是这个字符串后面有一个我们看不到的零宽空格,而零宽空格是非打印字符,所以还在pdf文件上显示异常。

三、解决方法

既然已经知道了这个字符无法在pdf文件上显示,且不影响实际内容。那么只需要将这个字符去掉就可以了。在网上找了下,基本都是推荐的这个方法:

//过滤链接中Zero-width space

$link = str_replace("\xe2\x80\x8b", '', $link);

$link = str_replace("\xe2\x80\x8c", '', $link);

$link = str_replace("\xe2\x80\x8d", '', $link);

但是我实际操作了一下,并没有效果。于是将那个字符串,输出一下utd-8编码,得到的是这个结果:

54638884%E2%80%AC

可以看到,数字后面的就是这个零宽空格的编码,那么接下来就简单了,把这个字符去掉就行了:

$link = str_replace("\xe2\x80\xac", '', $link);

这样一来,pdf上,就能正常显示了:

965b83085f9372f82cf94276cdf7c83f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值