Jim*_*ong 8 php unicode str-replace
我有缅甸语的文字,UTF-8.我正在使用PHP来处理文本.在此过程中的某些时候,一些ZWSP已经悄悄进入,我想将它们删除.我尝试了两种不同的方法来删除字符,似乎都没有用.
首先我尝试使用:
$newBody = str_replace("​", "", $newBody);
Run Code Online (Sandbox Code Playgroud)
搜索HTML实体并将其删除,因为这是它在Web Inspector下的显示方式.空格不会被删除.我也尝试过:
$newBody = str_replace("​", "", $newBody);
Run Code Online (Sandbox Code Playgroud)
得到相同没有结果.
我尝试的第二种方法是在这个问题中找到从PHP中的字符串中删除ZERO WIDTH NON-JOINER字符
看起来像这样:
$newBody = str_replace("\xE2\x80\x8C", "", $newBody);
Run Code Online (Sandbox Code Playgroud)
但我也没有结果.ZWSP未被删除.
An example word in the text ($newBody) looks like this : ???​??​????
And I want to make it look like this : ????????
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?preg_replace会以某种方式更好地工作吗?
所以我试过了
$newBody = preg_replace("/\xE2\x80\x8B/", "", $newBody);
Run Code Online (Sandbox Code Playgroud)
它似乎是运作,但现在还有另一个问题.
<a class="defined" title="Ukraine">??​?​?????</a>
Run Code Online (Sandbox Code Playgroud)
变成了
<a class="defined _tt_t_" title="Ukraine" style="font-family: 'Masterpiece Uni Sans', TharLon, Myanmar3, Yunghkio, Padauk, Parabaik, 'WinUni Innwa', 'Win Uni Innwa', 'MyMyanmar Unicode', Panglong, 'Myanmar Sangam MN', 'Myanmar MN';">????????</a>
Run Code Online (Sandbox Code Playgroud)
我不希望它添加所有额外的东西.任何想法为什么会这样?除了想出一些方法只针对两者之间的文本,有没有另一种方法来阻止preg_replace添加所有这些额外的东西?顺便说一句,在Mac上使用谷歌浏览器.似乎与firefox有点不同......
Jef*_*Jef 16
这个:
$newBody = str_replace("​", "", $newBody);
Run Code Online (Sandbox Code Playgroud)
假设文本是HTML实体编码的.这个:
$newBody = str_replace("\xE2\x80\x8C", "", $newBody);
Run Code Online (Sandbox Code Playgroud)
如果违规字符未编码但匹配错误的字符(0xe2808c),则应该有效.匹配与#8203相同的字符; 你需要0xe2808b:
$newBody = str_replace("\xE2\x80\x8B", "", $newBody);
Run Code Online (Sandbox Code Playgroud)
如果要从 UTF-8 字符串中删除零宽度空格字符:
$string = preg_replace('/[\x{200B}-\x{200D}\x{FEFF}]/u', '', $string);
Run Code Online (Sandbox Code Playgroud)
参考: