Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

PHP , PHPWord . Проблема с кодировкой

Дмитрий Глущенко Знаток (397), на голосовании 9 месяцев назад
Установил модуль PHPWord для генерации текстовых документов. Нашел инструкцию, как подтянуть к нему шаблон .docx с целью замены значений, ибо заново строить такой текстовый файл та еще затея. В моей версии скрипта, TemplateProcessor отвечает за замену текста в документе формата ${Test} на свои переменные свойством:
 $_doc->setValue('date_end', $dateEnd); 
Вот сама функция "setValue":
 public function setValue($macro, $replace, $limit = self::MAXIMUM_REPLACEMENTS_DEFAULT) 
{
foreach ($this->tempDocumentHeaders as $index => $headerXML) {
$this->tempDocumentHeaders[$index] = $this->setValueForPart($this->tempDocumentHeaders[$index], $macro, $replace, $limit);
}

$this->tempDocumentMainPart = $this->setValueForPart($this->tempDocumentMainPart, $macro, $replace, $limit);

foreach ($this->tempDocumentFooters as $index => $headerXML) {
$this->tempDocumentFooters[$index] = $this->setValueForPart($this->tempDocumentFooters[$index], $macro, $replace, $limit);
}
}
А так же, функция прописанная в ней "setValueForPart":
 protected function setValueForPart($documentPartXML, $search, $replace, $limit) 
{
if (substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {
$search = '${' . $search . '}';
}

if (!String::isUTF8($replace)) {
$replace = utf8_encode($replace);
}

// Note: we can't use the same function for both cases here, because of performance considerations.
if (self::MAXIMUM_REPLACEMENTS_DEFAULT === $limit) {
return str_replace($search, $replace, $documentPartXML);
} else {
$regExpDelim = '/';
$escapedSearch = preg_quote($search, $regExpDelim);
return preg_replace("{$regExpDelim}{$escapedSearch}{$regExpDelim}u", $replace, $documentPartXML, $limit);
}
}
Все страницы у меня в кодировке cp-1251. Так вот, при формировании документа из шаблона, вместо русских символов кракозябры:Как решить проблему с кодировкой, или копаю во все не туда?
Дополнен 10 месяцев назад
Решил проблему. Во второй функции необходимо заменить
 $replace = mb_convert_encoding ($replace,'UTF-8','Windows-1251'); 
Голосование за лучший ответ
Scrit 56 Антипов Мыслитель (5509) 10 месяцев назад
Учи pascal
Сергей НикольскийМыслитель (5617) 10 месяцев назад
Действительно. Дебильнее ответа не придумать.
Похожие вопросы