Проблема с кириллицей в PHPWord

При работе с библиотекой PHPWord, которая предназначена для работы с файлами docx средствами php, может возникнуть проблема с кириллицей. Все дело в функции utf8_encode(), которая применяется к строкам, и так находящимся в кодировке в UTF8.

Это старое решение, и сейчас, на сколько мне известно, проблема давно устранена.

Поэтому используйте просто современную версию библиотеки: https://github.com/PHPOffice/PHPWord

Если у вас остались с ней проблемы напишите в комментариях - я дополню информацию.


Оставлю старое решение здесь для истории:

Простейший способ решить данную проблему - отредактировать исходники библиотеки.
Это конечно самый последний костыль, который хотелось бы делать но..

В файле Shared/String.php
Найти в 130 строке:

public static function IsUTF8($value = '') {
    return utf8_encode(utf8_decode($value)) === $value;
}

Заменить на:

public static function IsUTF8($value = '') {
    return mb_check_encoding($value, "UTF-8");
}

Также следует найти и удалить автозаменой все упоминания utf8_encode в коде phpword
Их может быть много, так что просто заменяем utf8_encode на пустую строку. У нас получается вполне работоспособный код, хотя и слегка избыточный. Например:

//было:
$linkSrc = utf8_encode($linkSrc);

//стало:
$linkSrc = ($linkSrc);

Также следует позаботиться о том, чтобы в функции phpword передавались только строки в кодировке utf8
Это все. Теперь кириллица будет работать нормально.

Найти документацию по phpword можно здесь:
http://phpword.readthedocs.io/en/latest/ (en)
http://docs.mirocow.com/doku.php?id=php:docx_doc (ru)

Была ли эта статья полезна?
Да
Нет