我有缅甸语的文字,UTF-8。我正在使用PHP来处理文本。在此过程中的某些时候,一些ZWSP已经悄悄进入,我想将它们删除。我尝试了两种不同的方法来删除字符,似乎都没有用。
首先我尝试使用:
$newBody = str_replace("​", "", $newBody);
搜索HTML实体并将其删除,因为它是Web Inspector下的显示方式。这些空间不会被移除。我也尝试过:
$newBody = str_replace("​", "", $newBody);
并得到相同的结果。
我尝试的第二种方法是在Remove ZERO WIDTH NON-JOINER character from a string in PHP
这个问题上找到的看起来像这样:
$newBody = str_replace("\xE2\x80\x8C", "", $newBody);
但我也没有结果。 ZWSP没有被删除。
An example word in the text ($newBody) looks like this : ယူ​က​ရိန်
And I want to make it look like this : ယူကရိန်း
有什么想法吗? preg_replace会以某种方式更好地工作吗?
所以我尝试了
$newBody = preg_replace("/\xE2\x80\x8B/", "", $newBody);
它似乎是运作,但现在还有另一个问题。
<a class="defined" title="Ukraine">ယူ​က​ရိန်း</a>
转变为
<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>
我不希望它添加所有额外的东西。任何想法为什么会这样?除了想出一些方法只针对两者之间的文本,有没有另一种方法来阻止preg_replace添加所有这些额外的东西?顺便说一句,在Mac上使用谷歌浏览器。似乎与firefox有点不同......
答案 0 :(得分:15)
此:
$newBody = str_replace("​", "", $newBody);
假设文本是HTML实体编码的。这样:
$newBody = str_replace("\xE2\x80\x8C", "", $newBody);
如果违规字符未编码但匹配错误字符(0xe2808c),则应该有效。匹配与#8203相同的字符;你需要0xe2808b:
$newBody = str_replace("\xE2\x80\x8B", "", $newBody);