Задать вопрос
@Valentine5

PHP: почему библиотека PHPWORD выдает кракозябры при записи addText() в docx файл?

Здравствуйте!

1) В браузере получаю нормальную XML от парсера.

5fa01e21ccf29926046406.png

2) Пытаюсь записать данные в отчет Word (файл docx). Использую для этого библиотеку PHPWord. Код следующий:

$result = file_get_contents($output);
    echo '<pre>';
    var_dump($value);
    var_dump($result);
    echo '</pre>';
    $section->addText($result);
       $objWriter->save('helloWorld.docx');
       sleep(30);


3) Что-то в файл записывается, но MS Word это не открывает.

5fa01f550f099852831266.png

4) Если пытаюсь открыть файл helloWord.docx блокнотом, то показывает кракозябры.

5fa0226d8af07952472718.jpeg

5) Первое, что приходит в голову - это то, что либо кодировка, либо с архивацией что-то.. но загадка в том, что когда я попробовал записать в тот же самый файл не содержимое переменной, а просто текст (взял пример из мануала разработчика PHP WORD):
$section = $phpWord->addSection();
// Adding Text element to the Section having font styled by default...
$section->addText(
    '"Learn from yesterday, live for today, hope for tomorrow. '
        . 'The important thing is not to stop questioning." '
        . '(Albert Einstein)'
);


то он нормально записался в файл. Файл открывается и показывает текст отлично. Это значит, что ни кодировка, ни архивация в моей проблеме не виноваты? Тогда где искать ее решение?
  • Вопрос задан
  • 298 просмотров
Подписаться 2 Средний 1 комментарий
Решения вопроса 1
@Valentine5 Автор вопроса
Разобрался, надо было добавить PhpOffice\PhpWord\Settings::setOutputEscapingEnabled(true); до всех манипуляций в коде с Word. Дело было в самых данных XML. Word "не понимал" некоторых спецсимволов в нем, я так понял < и &. метод setOutputEscapingEnabled(true) в PHPWORD предназначен для обработки непрочитанных символов.. В итоге получил нормальную xml в вордовском файле. Дело за малым - нормальное форматирование придать..
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы