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

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

Простейший способ решить данную проблему — отредактировать исходники библиотеки.

В файле 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
Например:

//было:
$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)

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