Intereting Posts
как получить доступ к переменным PHP из JavaScript? mysql_fetch_assoc () ожидает, что параметр 1 будет ресурсом, boolean задан в C: \ xampp \ htdocs \ qcc \ truckdelivery.php в строке 9 не выбрана база данных Вставить модель Backbone.js в базу данных MySQL Интеграция Magento и Moodle PHP Неустранимая ошибка: Недостаточно памяти (выделено 80740352) (попытался выделить 12352 байта) в Laravel :: Разрешение Отказано на blade.php Плоский файл против базы данных – скорость? Какова наилучшая практика отправки писем из PHP-скрипта? Создание объекта JSON с использованием PHP Как получить продукты из определенной категории в magento электронной коммерции Волшебные кавычки в PHP Что это значит? "Ошибка анализа: синтаксическая ошибка, неожиданный T_PAAMAYIM_NEKUDOTAYIM" обратные вызовы модели laravel после сохранения, перед сохранением и т. д. выполнение скрипта Python в PHP и обмен данными между двумя PHP: Самый безопасный (дешифруемый) метод шифрования?

Ошибка: «Вход не соответствует UTF-8, укажите кодировку!», Используя PHP simplexml_load_string

Я получаю сообщение об ошибке:

parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xED 0x6E 0x2C 0x20

При попытке обработать ответ XML с помощью simplexml_load_string из стороннего источника. Необработанный XML-ответ объявляет тип содержимого:

<?xml version="1.0" encoding="UTF-8"?>

Однако, похоже, что XML не является UTF-8. Langauge содержимого XML является испанским и содержит такие слова, как Dublín в XML.

Я не могу заставить третью сторону разобраться с их XML.

Как я могу предварительно обработать XML и исправить несовместимость кодировок?

Есть ли способ определить правильную кодировку для XML-файла?

Solutions Collecting From Web of "Ошибка: «Вход не соответствует UTF-8, укажите кодировку!», Используя PHP simplexml_load_string"

Ваш 0xED 0x6E 0x2C 0x20 байт соответствует «ín» в ISO-8859-1, поэтому он выглядит так, как ваш контент находится в ISO-8859-1, а не UTF-8. Сообщите поставщику данных об этом и попросите их исправить его, потому что, если он не работает для вас, он, вероятно, тоже не работает для других людей.

Теперь есть несколько способов его работы, которые вы должны использовать, только если вы не можете нормально загружать XML . Один из них – использовать utf8_encode() . Недостатком является то, что если этот XML содержит как действительные UTF-8, так и некоторые ISO-8859-1, тогда результат будет содержать mojibake . Или вы можете попытаться преобразовать строку из UTF-8 в UTF-8 с помощью iconv() или mbstring и надеяться, что они исправит это для вас. (они не будут, но вы можете хотя бы игнорировать недопустимые символы, чтобы вы могли загрузить свой XML)

Или вы можете взять длинную длинную дорогу и проверить или исправить последовательности самостоятельно. Это займет некоторое время, в зависимости от того, насколько вы знакомы с UTF-8. Возможно, есть библиотеки, которые бы это сделали, хотя я не знаю.

В любом случае, уведомите поставщика данных о том, что они отправляют неверные данные, чтобы они могли его исправить.


Вот частичное исправление. Это определенно не исправить все, но исправит некоторые из них. Надеюсь, вам хватит, пока ваш провайдер не исправит свои вещи.

 function fix_latin1_mangled_with_utf8_maybe_hopefully_most_of_the_time($str) { return preg_replace_callback('#[\\xA1-\\xFF](?![\\x80-\\xBF]{2,})#', 'utf8_encode_callback', $str); } function utf8_encode_callback($m) { return utf8_encode($m[0]); } 

Я решил это, используя

 $content = utf8_encode(file_get_contents('http://example.com/rss.xml')); $xml = simplexml_load_string($content); 

Если вы уверены, что ваш XML-код закодирован в UTF-8, но содержит плохие символы, вы можете использовать эту функцию для их исправления:

 $content = iconv('UTF-8', 'UTF-8//IGNORE', $content); 

Вместо использования javascript вы можете просто поместить эту строку кода после предложения mysql_connect:

 mysql_set_charset('utf8',$connection); 

Приветствия.

Недавно мы столкнулись с подобной проблемой и не смогли найти ничего очевидного в качестве причины. В нашей строке оказался контрольный символ, но когда мы выводили эту строку в браузер, этот символ не был виден, если мы не скопировали текст в среду IDE.

Благодаря этой должности нам удалось решить эту проблему:

preg_replace ('/ [\ x00- \ x1F \ x7F] /', '', $ input);

Если вы загрузите файл XML и откройте его, например, в Notepad ++, вы увидите, что кодировка установлена ​​на что-то еще, чем UTF8. У меня была такая же проблема с xml, что и я, и это было просто te encoding в редакторе 🙂

Строка <?xml version="1.0" encoding="UTF-8"?> Не настраивает кодировку документа, это только информация для валидатора или другого ресурса.

Можете ли вы открыть сторонний источник XML в Firefox и посмотреть, что он автоматически определяет как кодирование? Возможно, они используют простой старый ISO-8859-1, UTF-16 или что-то еще.

Если они заявляют, что это UTF-8, и что-то еще, их фид явно сломан. Работа вокруг такого сломанного корма кажется мне ужасным (хотя иногда это неизбежно, я знаю).

Если это простой пример, например «UTF-8 по сравнению с ISO-8859-1», вы также можете попробовать свою удачу с помощью mb_detect_encoding () .

После нескольких попыток я обнаружил, что функция htmlentities работает.

 $value = htmlentities($value) 

При создании файлов сопоставления с использованием доктрины я столкнулся с одной и той же проблемой. Я исправил это, удалив все комментарии, которые некоторые поля имели в базе данных.

У меня была эта проблема. Оказывается, XML-файл (а не содержимое) не был закодирован в utf-8, а в ISO-8859-1. Вы можете проверить это на Mac с file -I xml_filename .

Я использовал Sublime для изменения кодировки файла в utf-8, а lxml не импортировал никаких проблем.