PHP: Как в библиотеке PHPWORD решить проблему русской кодировки в 2020 году?

коллеги!

Паршу XML-выдачу Яндекс и загоняю результаты в файл docx Word. Делаю это при помощи библиотеки PHPWORD таким манером:

$section->addText($result);
       $objWriter->save('helloWorld.docx');

В получившийся файл helloWorld.docx что-то записывается, но Word не хочет его открывать.

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

Если я пытаюсь открыть файл блокнотом, то текст показывается, но в виде краказябров

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

В браузер все данные выводятся нормально:

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

Я подозреваю, что проблема в кодировке, но что отредактировать в библиотеке PHPWORD - не понимаю.. Советы все в интернете старые по времени (вот, например: http://phpword.blogspot.com/2012/03/russkiy-yasik-v-phpword.html), у меня даже нет тех файлов, так как библиотеку только установил.. Может быть, кто-нибудь сталкивался со схожей проблемой недавно? Буду благодарен за любой совет и помощь...

P.S. Если развернуть детали в сообщении, которое показывается при открытии файла в Word, то там написано xml parsing error


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

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

В итоге удалось получить XML в отчет Word! Архивация и кодировки оказались ни при чем. введите сюда описание изображения

Выяснилось, что Word не воспринимает некоторые спецсимволы XML-льки, в частности: & и <, поэтому Word при открытии выдает ошибку Parsing XML error. Чтобы решить проблему, нужно добавить до всех манипуляций с Word подключение специального метода PHPWORD: PhpOffice\PhpWord\Settings::setOutputEscapingEnabled(true); Он предназначен для обработки нерасшифрованных символов xml. Вот тут некоторые альтернативные решения (https://stackoverflow.com/questions/40301312/xml-parsing-error-phpword), но в моем случае сработал упомянутый.

→ Ссылка