PHPWord操作中文乱码的修改办法


关键词

PHP Word PHPWord 中文乱码

摘要

PHPWord是一个维护在codeplex.com平台上的PHP操作Word文档的组件,但在处理中文文档时要添加对中文的编码支持,否则直接插入中文会导致乱码。

首先声明,不是PHPOffice/PhpWord组件,是PHPWord。

PHPWord
官网:http://phpword.codeplex.com/
PHPWord在用于操作中文时,要注意编码问题。需要对它做一些修改。

1、增加东亚字体支持
打开并编辑路径/Writer/Word2007/Base.php文件内容,大概在第349行(行数随着版本可能会有变化),函数_writeTextStyle内添加:
$objWriter->writeAttribute('w:eastAsia', $font);

该函数的上下文:
// Font  
if($font != 'Arial') {  
    $objWriter->startElement('w:rFonts');  
        $objWriter->writeAttribute('w:eastAsia', $font); // 添加这行
        $objWriter->writeAttribute('w:ascii', $font);  
        $objWriter->writeAttribute('w:hAnsi', $font);  
        $objWriter->writeAttribute('w:cs', $font);  
    $objWriter->endElement();  
}  

2. 解决模板中插件中文乱码问题
编辑PHPWord/Template.php,找到代码$replace = utf8_encode($replace);,删除或者注释掉这行代码,添加$replace = iconv( 'gbk','utf-8', $replace);,比如代码改为如下:

public function setValue($search, $replace) {  
    if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {  
        $search = '${'.$search.'}';  
    }  
   
    if(!is_array($replace)) {  
        //$replace = utf8_encode($replace);  
        $replace =iconv('gbk', 'utf-8', $replace); // 注释掉上面行后添加这行  
    }  
   
    $this->_documentXML = str_replace($search, $replace, $this->_documentXML);  
}

*****特别说明******
调用的时候,必须使用如下的方式传递中文进来:
$document->setValue('Template', iconv('utf-8', 'GB2312//IGNORE', '中文'));

3、解决Section中文乱码的问题
上面的代码主要解决模板的问题,下面同样的道理,解决Section添加文本的问题,找到代码$givenText = utf8_encode($text);,删除或者注释掉这行代码,添加$givenText = iconv('gbk', 'utf-8', $text);,比如代码如下:

public function addText($text, $styleFont = null, $styleParagraph = null) {  
    //$givenText = utf8_encode($text);  
    $givenText = iconv('gbk', 'utf-8', $text); // 注释掉上面行后添加这行  
    $text = new PHPWord_Section_Text($givenText, $styleFont, $styleParagraph);  
    $this->_elementCollection[] = $text;  
    return $text;  
}

最后提示的是:在模板模式下loadTemplate,只能使用setValue等模板操作方法,不能再添加段落或者段落修改了。

 

要饭二维码

洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权

本文属于“洪哥笔记”原创文章,转载请注明来源地址:PHPWord操作中文乱码的修改办法:http://www.splaybow.com/post/phpword-chinese-luma-466.html

如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D

« PHP操作Word的组件PHPWord有两个版本 PHPWord如何输出一个回车符到Word文档中 »