@ermolaev_nikita

Как избавиться от юникод символов в строке?

Всем привет, столкнулся со следующей проблемой:
Есть XML, в ней куча статей, все это спокойно обрабатывается, но как только в xml'ку попадает строка, которая содержит юникод символы, типа
x0f или х0е ,то SimpleXML кидает исключение, что невозможно прочитать файл
Пример:
<Значение>(рис.1)Значение>
https://www.freeformatter.com/xml-formatter.html - вот тут даже затестить можно.

Пробовал бороться чем-то таким:
$content = str_replace("\x0F", "", $content);
Ну или в цикле прогонять все str_replace по всем "плохим" символам, но текст большой и str_replace почему-то не везде заменяет.
Как вариант написать свой заменитель символов, но может уже кто-то сталкивался с этим?

Проблемный фрагмент записан тут
  • Вопрос задан
  • 1206 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vapaamies
@Vapaamies
Разработчик будущей ОС для ПК размером 250 МБ
Юникод тут вообще не причем. В представленном вами фрагменте присутствуют символы с десятичным кодом 15 (U+000F). Они одинаково кодируются во всех ASCII/ISO-совместимых кодировках (но не в EBCDIC), изменение кодировки не поможет.

Присутствие подобных символов может указывать на текст, импортированный из некой старой (DOS) программы, где использовались коды Epson-совместимого принтера, или на небрежный (машинный) импорт из двоичного формата, при котором вместе с текстом просочились служебные символы форм.

В общем случае в веб-документах не должно быть символов с кодом меньше пробела (переводы строк и табуляции не в счет). Вам нужно определиться, заменить символы пробелами или просто удалить, после чего обработать входящий текст, исправив все проблемные символы «не глядя»:
$text = preg_replace('/[\x01-\x08\x0B\x0C\x0E-\x1F]/', ' ', $text);  // меняем на пробел
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы