Страница 1 из 1

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

Добавлено: 03 ноя 2017, 01:24
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". В двойных кавычках можно прямо так переменную в строку вписывать.