gpt4 book ai didi

php - 删除 Unicode 零宽度空格 PHP

转载 作者:可可西里 更新时间:2023-11-01 12:30:18 29 4
gpt4 key购买 nike

我有一个缅甸语 UTF-8 文本。我正在使用 PHP 处理文本。在这个过程中的某个时候,一些 ZWSP 已经悄悄进入,我想将它们移除。我尝试了两种不同的方法来删除字符,但似乎都不起作用。

首先我尝试使用:

  $newBody = str_replace("​", "", $newBody);

搜索 HTML 实体并将其删除,因为这是它在 Web 检查器下的显示方式。空格不会被删除。我也尝试过:

  $newBody = str_replace("&#8203", "", $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">ယူ&#8203;က&#8203;ရိန်း</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 的行为有点不同......

最佳答案

这个:

$newBody = str_replace("&#8203;", "", $newBody);

假定文本是 HTML 实体编码的。这:

$newBody = str_replace("\xE2\x80\x8C", "", $newBody);

如果有问题的字符没有编码但匹配错误的字符(0xe2808c)应该可以工作。匹配与#8203相同的字符;你需要 0xe2808b:

$newBody = str_replace("\xE2\x80\x8B", "", $newBody);

关于php - 删除 Unicode 零宽度空格 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22600235/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com