Удалить Unicode Zero Width Space PHP
у меня есть текст на бирманском языке, UTF-8. Я использую PHP для работы с текстом. В какой-то момент по пути некоторые ZWSPs прокрались, и я хотел бы удалить их. Я пробовал два разных способа удаления символов, и ни один из них не работает.
сначала я попытался использовать:
$newBody = str_replace("", "", $newBody);
для поиска HTML-сущности и ее удаления, как это выглядит в разделе веб-инспектор. Пробелы не удаляются. Я тоже пробовал as:
$newBody = str_replace("​", "", $newBody);
и получить тот же результат.
второй метод, который я пробовал, был найден по этому вопросу удалить символ нулевой ширины из строки в PHP
, который выглядел вот так:
$newBody = str_replace("xE2x80x8C", "", $newBody);
но я также не получил никакого результата. ZWSP не был удален.
An example word in the text ($newBody) looks like this : ယူကရိန
And I want to make it look like this : ယူကရိနး
какие идеи? Может еще работать как-то лучше?
поэтому я попытался
$newBody = preg_replace("/xE2x80x8B/", "", $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 всех этих дополнительных вещей? Кстати, используя google chrome на mac. Кажется, он действует немного по-другому с firefox...
1 ответов
Это:
$newBody = str_replace("​", "", $newBody);
предполагает, что текст закодирован HTML-сущностью. Это:
$newBody = str_replace("\xE2\x80\x8C", "", $newBody);
должно работать, если оскорбительные символы не закодированы, но соответствуют неправильному символу (0xe2808c). Чтобы соответствовать тому же символу, что и #8203; вам нужно 0xe2808b:
$newBody = str_replace("\xE2\x80\x8B", "", $newBody);