Используя нашу любимую и просто чудесную библиотеку PHPWord многие сталкиваются с проблемой кодировки. Оказывается разработчики дважды "кодят" в utf-8. Зачем? я не решусь копаться во всех "премудростях". Ну а чтобы увидеть наши русские буковки сделайте так:
Найдите файл PHPWord/Section.php и закомментите все строчки, в которых встречается utf8_encode(). Строку с переменной !!!$givenText;!!! Её комментить не нужно!!! Можно прописать только $givenText = $text;Источник сией мудрой мысли тут.
Я сам все проверил, работает на ура. !!!главное не забудьте сам файл кодировать),благо блокнот плас плас не проприетарный)))
З.Ы. Как верно подметил мистер Сoolakov, та же трабла возникает и при заполнении таблиц, читайте его коммент ниже и будет вам "решпект" от клиента или препода.
Та же самая проблема встречается и при создании таблиц.
ОтветитьУдалитьНо и решение, собственно то же самое: в файле PHPWord\Section\Table\Cell.php закомментировать строки с utf8_encode()
верно подметили
УдалитьЭтот комментарий был удален администратором блога.
ОтветитьУдалитьТолько установил сие диво. Вопрос: можно ли сохранять именно в doc а не в docx. При вызове используется writer2007 а вот 2003й имеется ли? теоретически надо просто не упаковывать doc используя зиповскую библу?? Может ответ уже имеется у вас и мне не надо самому тратить время и серое вещество?
ОтветитьУдалитьподружить с кириллицей выше описанным методом не удалось. Если закоментировать все utf8_encode - ворд сгенерированный фал открыть не может. Проверял mb_detect_encoding() в функции передается utf8.
ОтветитьУдалитьАналогично
УдалитьПытаюсь найти как объединить ячейки. Помогите, если знаете.
ОтветитьУдалитьword? или excel ?
УдалитьНужно не комментировать, а заменить на iconv('windows-1251', 'UTF-8',$text); Так точно работает.
ОтветитьУдалитьСработало. Версия PHPWord_0.6.2_Beta
УдалитьУ меня ни iconv('windows-1251', 'UTF-8',$text); ни mb_convert_encoding не сработало. Помогло именно закомментирование.
ОтветитьУдалитьСервер - последний apache, ОС - Win2003 русская.
Если работаете с Template.php, то обязательно нужно закоментировать ~/PHPWord/Template.php. 89 строка после изменения //$replace = utf8_encode($replace);
ОтветитьУдалить$givenText = utf8_encode($text);
ОтветитьУдалитьна
$givenText = mb_convert_encoding ($text,'UTF-8','Windows-1251');
$linkSrc = utf8_encode($linkSrc);
на
$linkSrc = mb_convert_encoding ($linkSrc,'UTF-8','Windows-1251');
$linkName = utf8_encode($linkName);
на
$linkName = mb_convert_encoding ($linkName,'UTF-8','Windows-1251');
$text = utf8_encode($text);
на
$text = mb_convert_encoding ($text,'UTF-8','Windows-1251');
$replace = utf8_encode($replace);
на
$replace = mb_convert_encoding ($replace,'UTF-8','Windows-1251');
И при сохранении исходных файлов PHPWord смотрим чтобы кодировка была 1251.
И в файле откуда вызываем скрипт тоже 1251.
либо работаем везде с UTF-8 и тогда можно совсем убирать преобразование utf8_encode().
Вот спасябо авторам и Владельцу этого сайта, а так же всем ребятам в комментариях к посту!!! Помогло, хотел было уже отказываться в сторону ручной генерации Word
ОтветитьУдалить