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 шт):
В итоге удалось получить 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), но в моем случае сработал упомянутый.


