Ошибка декодирования некоторых специальных символов & # 146; & Амп; # 147; & Амп; # 148;

Я пытаюсь декодировать некоторые специальные символы в php и не могу найти способ сделать это.

 $str = 'Thi’s i"s a’n e”xa“mple';

Это просто возвращает несколько точек.

$str = preg_replace_callback("/(&#[0-9]+;)/", function($m) {
return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES");
}, $str);

Некоторые другие тесты просто возвращают ту же строку.

$str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
$str = htmlspecialchars_decode($str, ENT_QUOTES);

Во всяком случае, я пробовал всевозможные комбинации, но на самом деле не представлял, как преобразовать это в символы UTF-8.

То, что я ожидаю увидеть, это:

Thi’s i"s a’n e”xa“mple

И на самом деле, если я возьму это прямо и использовать htmlentities для кодирования я вижу разные символы для начала.

Thi’s i"s a’n e”xa“mple

К сожалению, у меня нет контроля над источником, и я застрял в отношениях с этими персонажами.

Являются ли они нестандартными, мне нужно заменить их вручную на мою таблицу поиска?

РЕДАКТИРОВАТЬ

Глядя на эту таблицу здесь: https://brajeshwar.github.io/entities/

Я вижу персонажей, которых я ищу, нет в списке. Когда я тестирую несколько символов из этой таблицы, они прекрасно декодируются. Я думаю, что список в PHP не является полным по умолчанию?

2

Решение

Если вы проверите стандарт Юникода для символов, на которые вы ссылаетесь: http://www.unicode.org/charts/PDF/U0080.pdf

Вы увидите, что все кодовые точки, которые есть в вашей строке, не имеют представимых глифов и являются управляющими символами.

Это означает, что ожидается, что они будут отображаться как пустые квадраты (или точки, в зависимости от того, как ваш обработчик обрабатывает их).

Если это работает для кого-то где-то — это нестандартное поведение, на которое нельзя полагаться, так как оно, ну, в общем, нестандартное.

Очевидно, у вашего текста есть начальная кодировка cp1250, поэтому вы должны либо обработать его соответствующим образом, либо перекодировать объекты вручную:

$str = 'Thi’s i"s a’n e”xa“mple';

$str = preg_replace_callback("/&#([0-9]+);/u", function($m) {
return iconv('cp1250', 'utf-8', chr($m[1]));
}, $str);

echo $str;
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]