Home  >  Article  >  Backend Development  >  不一般的phpword中文乱码有关问题

不一般的phpword中文乱码有关问题

WBOY
WBOYOriginal
2016-06-13 11:46:30994browse

不一般的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
数据库的的编码也改了,然后自己看看是不是乱码。数据库读取编码方式要在连接之前设置。
。。。。。。。
如果你这么干了,一般来说就不会乱码了。如果还是乱码只能说明还有页面你么有改过来,或者失败了。
不要怕烦,我也在这上面烦过很久。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn