Я работаю над этим проектом, где я получаю разные XML-файлы из разных источников. Мой PHP-скрипт должен их читать, анализировать и сохранять в базе данных mysql.
Для разбора файлов XML я использую класс SimpleXMLElement в PHP. Я получаю файлы из Бельгии в кодировке UTF-8, из Германии в кодировке iso-8859-1, из Чехии в cp1250 и т. Д. ...
Когда я передаю данные xml в SimpleXMLElement и печатаю asXML () на этом объекте, я правильно вижу данные xml, как это было в исходном файле XML.
Когда я пытаюсь присвоить поле PHP-переменной и печатать эту переменную на экране, текст выглядит поврежденным и, конечно, также поврежденным при вставке в базу данных mysql.
Пример:
XML:
<?xml version="1.0" encoding="cp1250"?>
...
<name>Labe Dìèín - Rozb 741,85km ; Dìèín - Rozb 741,85km </name>
...
Код PHP:
$sxml = file_get_contents("test.xml");
$xml = new SimpleXMLElement($sxml);
//echo $xml->asXML() . "\n"; // content will show up correctly in the shell
$name = (string)$xml->ftm->fairway_section->geo_object->name;
echo $name . "\n";
Результат кода (на оболочке linux bash) перемещает курсор вверх и затем печатает: bÃn - Rozb 741,85km; DÄ (движение курсора, конечно, связано с неправильными символами, которые выводятся на PHP)
Я думаю, что PHP преобразует свои данные в UTF-8, чтобы сохранить их в строковом параметре, поэтому я предположил, что использование mb_convert_encoding для преобразования из UTF-8 в cp1250 покажет правильный результат, но это не так. Также я должен иметь возможность хранить данные в формате, который можно комбинировать со всеми другими источниками.
Я не очень разбираюсь в кодировках / кодовых страницах, возможно, поэтому я не могу заставить его работать правильно, но я знаю, что если я копирую / вставляю тексты с разных языков, например, в новый файл UltraEdit, все они отображаются правильно. Как UltraEdit справляется с этим? Использует ли он UTF-8 (который, как я предполагаю, может показать что-нибудь?)
Как я могу преобразовать мои данные так, чтобы они всегда отображались с любой кодировкой в источнике?