【PHP】解决字符串中出现 “​” 宽空格隐藏字符的问题

这个字符通常在命令行打印,MySQL 或 hive 表等直接打印是看不到的,但输出到网页上,有时又能渲染出来。

为了替换掉这个字符也是费了不少时间。

首先判断一个字符串里是否存在这个隐藏字符,我们需要挨个打印字符串中的单个字符的 ASCII 码:

$result = "年轻人应该多尝试,做些有趣的事情。 ";      // 末尾由四个宽空格组成,<200b><200b><200b><200b>
var_dump($result);
for($i = 0; $i < strlen($result); $i++) {
    print_r(ord($result[$i]) . PHP_EOL);
}

$:

...(省略)
32
226
128
139
226
128
139
226
128
139
226
128
139

32代表末尾的空格,而后面这12个数字,每三个代表一个 unicode 字符。


226 128 139 其实对应的是 Unicode 字符的编码,这里有一个编码表可以查看:

https://utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128&utf8=dec


image.png

所以这个隐藏的字符是真实存在的。

那么如何去除这种隐藏字符呢?

试过几种方式,如果粘贴这个空格的原字符串到编辑器里,发现并不能按预期那样地转换。比如 phpStorm 会把我们粘进去的这个宽空格自动转成普通空格。


找了许久,发现这个替换能用:


$result = preg_replace("/\xE2\x80\x8B/", "", $result);        // $result 替换成我们的待处理字符串


一个小的问题,但是处理起来却没有特别清晰通用的方法,包括上面这个替换也很少见。

希望对大家有帮助

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«   2020年10月   »
1234
567891011
12131415161718
19202122232425
262728293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接

    Powered By Z-BlogPHP 1.5.2 Zero

    Copyright liuyang1.com. 转载文章,请注明出处。谢谢!