我有一个缅甸语UTF-8文本。我使用PHP与文本工作。在这个过程中的某个时刻,一些zwsp已经悄悄进入,我想删除它们。我尝试了两种不同的方法来删除字符,但似乎都不起作用。
首先我尝试使用:
$newBody = str_replace("​", "", $newBody);
来搜索HTML实体并删除它,因为这是它在Web Inspector下的显示方式。空格不会被移走。我也试过:
$newBody = str_replace("​", "", $newBody);
并得到相同的no结果
我尝试的第二种方法是在这个问题上发现从PHP中的字符串中删除ZERO WIDTH NON-JOINER字符
看起来像这样:
$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上使用google chrome浏览器。它的行为似乎与firefox有点不同…
This:
$newBody = str_replace("​", "", $newBody);
假定文本是HTML实体编码。:
$newBody = str_replace("'xE2'x80'x8C", "", $newBody);
如果有问题的字符没有编码,但匹配错误的字符(0xe2808c), 应该工作。匹配#8203;你需要0xe2808b:
$newBody = str_replace("'xE2'x80'x8B", "", $newBody);
如果要从UTF-8字符串中删除零宽度空格字符:
$string = preg_replace('/['x{200B}-'x{200D}'x{FEFF}]/u', '', $string);
引用:
- https://gist.github.com/ahmadazimi/b1f1b8f626d73728f7aa (php)
- 从JavaScript字符串(js)中删除零宽度空格字符