Исправляем ошибку simplexml_load_file Input is not proper UTF-8

Полезные скрипты
Ответить
Аватара пользователя
mihas
Администратор
Сообщения: 1368
Зарегистрирован: 18 авг 2004, 16:58
Откуда: Москва
Контактная информация:

Исправляем ошибку simplexml_load_file Input is not proper UTF-8

Сообщение mihas »

Столкнулся с тем, что в сложном xml-файле одна программа записывала изредка не юникодные символы, например так:

Код: Выделить всё

CIELAB (2� observer, D50)
Где какой-то непонятный квадратик или символ в неизвестной кодировке, вместо значка градуса ° °
Мне этот значок не нужен был вообще в контексте вычислений, а функция simplexml_load_file из-за этого значка выдавала ошибку.
Решение простое - преобразовать вначале файл xml из юникода в юникод с игнорированием всех посторонних символов с помощью iconv:

Код: Выделить всё

$fileXML = fopen("/path/example.xml", 'r');
$textXML = fread($fileXML, filesize("/path/example.xml"));
fclose($fileXML);
$fileXML = fopen("/path/example.xml", 'w');
$textXML = iconv('utf-8', 'utf-8//IGNORE', $textXML);
fwrite($fileXML, $textXML);
fclose($fileXML);
И дальше функция simplexml_load_file начинает работать без ошибок. Замените путь /path/ к файлу на свой от корня сервера. Обращаю внимание, что "/path/example.xml" в двойных кавычках, если захочется брать имя файла из переменной, типа как: "/path/$examplexml". В двойных кавычках можно прямо так переменную в строку вписывать.
Ответить

Вернуться в «PHP»