Проблема кодировки PHP MySQL с XML - PullRequest
1 голос
/ 24 марта 2012

Я имею дело со сторонним XML, который содержит специальные символы, такие как маркеры, длинные тире и т. Д.

Пример XML:

$xml = "<xml><node>• Special Characters</node></xml>";

Моя цель - проанализировать этот XML с помощью PHP и вставить его в базу данных MySQL. Я использую DomDocument для анализа XML, чтобы получить объект SimpleXMLElement из узла DOM, используя simplexml_import_dom.

Метод загрузки DomDocument завершается ошибкой, если я не использую utf8_encode для кодирования xml.

$doc = new DOMDocument();
$doc->loadXML(utf8_encode($xml));

Чтобы разобрать xml, я понимаю, что мне нужна функция utf8_encode. После возможности анализа XML вставки в таблицу MySQL приведут к появлению специальных символов в виде? или мусор. Даже специальные символы из XML, если они отображаются в браузере после разбора, будут мусором.

Столбец таблицы MySQL имеет текстовый тип данных и находится в сопоставлении latin1_swedish_ci. Я видел похожие вопросы по SO и пробовал их решения, такие как запуск mysql_query('SET NAMES utf8') или изменение кодировки столбцов, но они не работали для меня.

Пожалуйста, сообщите.

1 Ответ

0 голосов
/ 24 марта 2012

Проблема в том, что ваша база данных по умолчанию работает только с кодировкой Latin1. Вы захотите изменить свою базу данных или таблицу (я забыл, какую, может быть, обе) кодировкой на UTF8.

Вы можете попробовать

alter table TABLE_NAME charset utf8

http://wolfram.kriesing.de/blog/index.php/2007/convert-mysql-db-to-utf8

...