日期:2014-05-16  浏览次数:20462 次

不一般的phpword中文乱码问题
在php中用phpword库生成word文档的时候,会出现乱码,我在网上查找过很多这方面的资料,按照上面的步骤,修改了template.php中的
  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);
        }
把里面 的 utf8_encode 换成 iconv('gbk','utf-8',$replace);

也对文本进行了转码,在从数据库读取出的数据也转码了,写入word文档中的时候还是转码了,可是在生成word的时候中文变成了乱码,转码的时候都是从gbk转成utf-8。
请各位大侠帮小弟支两招,谢谢啊。

------解决方案--------------------
帮顶一下吧。没遇到过
------解决方案--------------------
不太明白!!!
------解决方案--------------------
造成乱码的原因无非是数据类型的转换问题
字符串--数组 如果用的是gbk的话 就得把字符串转换成数组

         // 造成乱码的原因是 gbk 在转换的时候 数据类型的转换:字符--数组 所以 出现了乱码
 foreach($orders as $key1 => $order)
 {
   $orders[$key1]['order_goods'] = '';
   if($orders[$key1]['add_time'])
   {$orders[$key1]['add_time'] =  date('Y-m-d H:i:s', $orders[$key1]['add_time']);}
   if($orders[$key1]['pay_time'])
   {$orders[$key1]['pay_time'] = date('Y-m-d H:i:s', $orders[$key1]['pay_time']);}
   if($orders[$key1]['ship_time'])
   {$orders[$key1]['ship_time'] = date('Y-m-d H:i:s', $orders[$key1]['ship_time']);}
   if($orders[$key1]['finished_time'])
   {$orders[$key1]['finished_time'] = date('Y-m-d H:i:s', $orders[$key1]['finished_time']);}
   if($orders[$key1]['evaluation_time'])
   {$orders[$key1]['evaluation_time'] = date('Y-m-d H:i:s', $orders[$key1]['evaluation_time']);}
        }

本来在数据库里字段是字符串,但 导出数据时若是以gbk方式导出的话 就得转换数据类型。
若是 utf-8 就不需要了。
------解决方案--------------------
刚下载了个PHPword测试了下,可以输入中文(使用模板生成word文件)。

我的格式是:文件保存为ANSI格式

然后修改template.php文件,
把utf8_encode哪一行改为$replace=iconv('gbk','utf-8',$replace);
之后就可以输出中文了,而且没有乱码。

你的数据库是utf-8格式编码的。可以这样:
1.如果你的程序也是utf-8格式的话,建议把$replace=iconv('gbk','utf-8',$replace);也注释掉,这样不用转码。

2。如果你的程序时gbk编码,你从数据库取出来需要先iconv('utf-8','gbk',$value);同时template。php中的$replace=iconv('gbk','utf-8',$replace);需要加上。

试一试吧。祝你好运

------解决方案--------------------
把跟你这个功能有关的的页面全部加上页面显示编码的语句,同时用工具改成这个编码的。但是一定要确定在转换编码后你看代码显示的时候中文没有乱码,你会发现有可能失败了他全变成??????了,那你把页面给删除掉,重新复制进去。可以用notepad++,或者editplus
数据库的的编码也改了,然后自己看看是不是乱码。数据库读取编码方式要在连接之前设置。
。。。。。。。
如果你这么干了,一般来说就不会乱码了。如果还是乱码只能说明还有页面你么有改过来,或者失败了。
不要怕烦,我也在这上面烦过很久。