Обработка ошибок кодирования при чтении XML с помощью PHP - PullRequest
1 голос
/ 27 августа 2011

Я использую XMLReader для анализа XML от стороннего производителя.Файлы должны быть в формате UTF-8, но я получаю эту ошибку:

parser error : Input is not proper UTF-8, indicate encoding !

Bytes: 0x11 0x72 0x20 0x41 in C:\file.php on line 166

Глядя на файл XML в блокноте ++, этоПонятно, что вызывает это: в проблемной строке содержится управляющий символ DC1 .

Файл XML предоставлен третьей стороной, которую я не могу с уверенностью получить, чтобы исправить это / гарантировать, что это не произойдет в будущем.Может ли кто-нибудь порекомендовать хороший способ борьбы с этим?Я хотел бы просто покончить с управляющим символом - в данном конкретном случае просто удалить его из файла XML хорошо - но я обеспокоен тем, что всегда выполнение этого может привести к непредвиденным проблемам в будущем.Спасибо.

Ответы [ 3 ]

0 голосов
/ 27 августа 2011

Вы можете использовать str_replace() при условии, что строка действительна UTF-8.Обратите внимание, что str_replace() будет работать с байтовыми смещениями, так что вы больше не имеете дело со строками PHP, а со строками байтов.

И есть минус: если ваша третья сторона включает в себя случайные пробелы и управляющие символы,в XML нет никакой цели, можно предположить, что они в конечном итоге сломают UTF-8.Таким образом, вы не можете использовать str_replace() с уверенностью (только добросовестно), пока не убедитесь, что их текущий дамп дня не совсем бесполезен.

Возможно, вы могли бы взять ярлык и набить его вlibxml DOMDocument объект и подавление ошибок с помощью @, оставляя библиотеку libxml для обработки ошибок.Что-то вроде:

$doc = new DOMDocument();
if(@$doc->loadXML($raw_string)) {
  // document is loaded. time to normalize() it.
}
else {
  throw new Exception("This data is junk");
}
0 голосов
/ 28 августа 2011

Почему вы и третья сторона обмениваетесь данными в XML? Предположительно обе стороны ожидают получить некоторые преимущества, используя XML, а не какой-то случайный проприетарный формат. Если вы позволите им сгенерировать плохой XML (я предпочитаю называть его не-XML), то ни одна из сторон не получит этих преимуществ. В их интересах исправить их. Попробуйте убедить их в этом.

0 голосов
/ 27 августа 2011

Почему третья сторона не может надежно решить эту проблему?Если в их XML есть недопустимые символы, я бы поспорил, что это допустимая проблема.

Сказав это, почему бы просто не удалить символ, прежде чем анализировать его, используя str_replace ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...