PHP: simplexml_load_string или Word что-то делает с русской кодировкой и текст неправильно загружается в docx файл
Всем привет! Паршу результаты выдачи поисковика yandex с помощью библиотеки PHP Query:
- Хочу добиться записи этих результатов в нужном мне формате в документ Word.
- Для этого использую библиотеку PHP Word.
- Перед записью в Word методом simplexml_load_string преобразую элементы xml в Simple XML объекты (чтобы извлекать нужные мне узлы).
Результат: $section->addText($lo); отрабатывает нормально, в документе word появляются url латиницей, которые там лежат, а вот $section->addText($str); записывает в Word кракозябры, например: ÐоÑемÑ. Что я делаю не так? Ниже прилагаю свой код:
$result = file_get_contents($output);
$al = simplexml_load_string($result);
$str = $al->{'response'}->results->grouping->group[0]->doc->title->hlword[0];
$lo = $al->{'response'}->results->grouping->group[0]->doc->url;
$section->addText($str);
$section->addText($lo);
Какие действия предпринял:
- Попытался записать в docx файл не $str или $lo, а $result - xml записалось и корректно отобразилось в word, русские символы отобразились корректно.
- Выводил при помощи функции mb_detect_encoding кодировку на разных этапах до загрузки переменной $str и $lo. Все время было utf-8, в том числе непосредственно до загрузки данных в документ.
На скрине прилагаю результат, который получается в word:
Post Scriptum: прогнал полученные в Word символы через онлайн декодер кодировок. Вот как определяет исходную и конечную кодировку:
Ответы (1 шт):
Почему в PHP Word не вставлялся Simplexmlobject, содержащий русскоязычные символы так и не выяснил, но нашел способ обойти проблему:
$clay = $al->{'response'}->results->grouping->group[0]->doc->title->hlword;
foreach ($clay as $sd) {
$arr[] = '' . $sd . '';
}
$res = implode(" ", $arr);
потом:
$section->addText($res);
и русскоязычные заголовки таки добавляются успешно в docx. То есть, нужно вставлять их не объектом, а строкой, хотя в документации к PHP Word, в самом начале написано, что Writer принимает объекты: https://phpword.readthedocs.io/en/latest/intro.html#features

