Задать вопрос

Вырезать битые символы из юникод XML

День добрый. Такая проблема:
Есть XML файл, в котором находится часть текста, распознанная какой-то OCR. Файл в кодировке скорее всего UTF-16LE. Некоторые символы в файле битые и при использовании PHP SimpleXML файл не обрабатывается нормально.

Задача — как-то вырезать эти символы или их игнорировать. С использованием PHP. Пытался бороться с помощью
iconv("UTF-16LE". "UTF-16LE//IGNORE", $loaded_file);

когда файл открывался как строка, а потом уже преобразовывался в XML объект. Не помогает, так же пытался поменять кодировку с помощью iconv, но она выдавала пустую строку.

Образец файла
  • Вопрос задан
  • 5739 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
@m-haritonov
Попробуйте так:
<?php
$text = file_get_contents(__DIR__ . '/20720351_2010_-_1_unicode.xml');
$text = iconv('UTF-16LE', 'UTF-8', $text);
// http://stackoverflow.com/a/12265956
$text = preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', ' ', $text);
$element = simplexml_load_string($text);
var_dump($element);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@m-haritonov
… сообщение удалено (написал не в ту ветку)...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы