PHP: simplexml_load_string или Word что-то делает с русской кодировкой и текст неправильно загружается в docx файл

Всем привет! Паршу результаты выдачи поисковика yandex с помощью библиотеки PHP Query:

  1. Хочу добиться записи этих результатов в нужном мне формате в документ Word.
  2. Для этого использую библиотеку PHP Word.
  3. Перед записью в 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);

Какие действия предпринял:

  1. Попытался записать в docx файл не $str или $lo, а $result - xml записалось и корректно отобразилось в word, русские символы отобразились корректно.
  2. Выводил при помощи функции mb_detect_encoding кодировку на разных этапах до загрузки переменной $str и $lo. Все время было utf-8, в том числе непосредственно до загрузки данных в документ.

На скрине прилагаю результат, который получается в word:

введите сюда описание изображения

Post Scriptum: прогнал полученные в Word символы через онлайн декодер кодировок. Вот как определяет исходную и конечную кодировку:

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Valentin

Почему в 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

→ Ссылка