首页 > 编程技术 > php

phpword中文字符乱码解决办法

发布时间:2016-11-25 17:38

本文章晋级人大家介绍phpword中文字符乱码解决办法,希望此文章对各位所有帮助哦。

最近领导要求用php生成word,网上找了很多类啊,函数啊。最终相中phpword。无奈不是国人开发,对中文支持很不友好。经过研究,终于解决了中文乱码,分享出来。

1、用模板word生成word中文乱码解决方案:

打开phpword/Template.php文件,找到$replace = utf8_encode($replace);将其改为$replace =iconv('gbk', 'utf-8', $replace); 即可。

2、直接生成word文档,调用addText对象时中文乱码解决方案:

打开phpword/Section.php文件,找到$givenText = utf8_encode($text);将其改为$givenText = iconv('gbk', 'utf-8', $text);即可。

3、貌似其他方法也类似第解决。

4、注意php文件采用gbk哦。反正我的显示中文了。在网上找了好久,研究了半天才搞定。

本文章来给各位介绍我在使用淘宝 API 返回的json数据无法用json_decode的问题的一些解决办法介绍,大家可参考。

如题,这个问题困扰我已久。。。经过自己的多次尝试,和到网上搜索,我已大概猜测到是字符的问题,论坛上的朋友说,PHP的json_decode对json数据要求非常严格,必须是{“key”:”value”}的双引号包围才行,而且,对一些特殊符号不兼容。。。例如UTF-8的 BOM头,或者是C++字符的结束符等等。。。

经过排查,我发现。。。淘宝API返回的json数据(特别是taobao.taobaoke.items.detail.get),之所以json_decode后,结果为null,原因就是返回的数据含有回车符。。。这可能是一些店主在装修时,或者填写店铺描述,商品描述不规范所留下的。。。所以用

 代码如下 复制代码

$json = str_replace(array(“rn”,”n”,”r”,”t”,chr(9),\n),”,$json );      
$json = json_decode($json,true);    

这样就可以解决这个问题了。

本文章来给各位同学介绍file_get_contents不能获取带端口的网址解决办法,有需要了解的同学可参考。


先们来了解file_get_contents() 函数,官方介绍说它是把整个文件读入一个字符串中。


例子

<?php
echo file_get_contents("test.txt");
?>

输出:

This is a test file with test text.

同样此函数还可以用于获取远程服务器上的内容


file_get_contents('http://www.111cn.net');

这样也是没有问题,但是如果我带了端口了就有问题了


例如:


file_get_contents('http://localhost:12345');


没有任何获取。

解决方法是 :关闭selinux

1 永久方法 – 需要重启服务器

修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。

2 临时方法 – 设置系统参数

使用命令setenforce 0

附:

setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式

php的allow_url_fopen选项是关闭了

原因是我们php.ini中把php的allow_url_fopen选项是关闭了,我们只要把它打开即可。

如果你没有权限打开allow_url_fopen的话我们可使用curl函数的来替换,也是很方法的。

在php中file_get_contents函数可直接采集远程服务器内容,然后保存到一个变量中了,介理一般都会把file_get_contents、fsockopen等一些IO操作的函数禁用掉,因为它们怕被 DDOS

那么一般情况下,我们改不了服务器的 inc.php,只能自己写一套IO来代替上面的PHP函数了。

 代码如下 复制代码


$url = file_get_contents('http://www.111cn.net/');

我们可以用下面的代码代替

 代码如下 复制代码

//禁用file_get_contents的解决办法
$ch = curl_init();
$timeout = 10; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL,'http://www.111cn.net/');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$url = curl_exec($ch);


curl是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等,它不会被服务器禁用,所以我们可以用来模拟file_get_contents一样打开一条URL。

利用function_exists函数来判断php是否支持一个函数可以轻松写出下面函数

 

 代码如下 复制代码
< ?php
 function vita_get_url_content($url) {
 if(function_exists('file_get_contents')) {
 $file_contents = file_get_contents($url);
 } else {
 $ch = curl_init();
 $timeout = 5; 
 curl_setopt ($ch, CURLOPT_URL, $url);
 curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
 curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
 $file_contents = curl_exec($ch);
 curl_close($ch);
 }
 return $file_contents;
 }
 ?>
出现这种问题是你的include路径不对了,如果是cms可能是你的系统环境没配置好,下面我来介绍此问题的两种解决方案。

以下是Discuz的一个报错。

Fatal error: require_once() [function.require]: Failed opening required './source/class/class_core.php' (include_path='.;c:php5pear') in D:webBBSindex.php on line 14

解决办法

修改php.ini配置文件。

 代码如下 复制代码

; Windows: "path1;path2"
;include_path = ".;c:phpincludes"
改为:
; Windows: "path1;path2"
include_path = "c:phpincludes"

如果你使用的是iis可能就权限配置问题了,我们可尝试按下面方法解决

为了行文方便,我先说下我的目录结构

1、  D:FreeHost为网站根目录,在它的下面放置DZ论坛、wordpress博客和织梦门户网站;

2、  以dz论坛举例,D:FreeHostwebdz2013_JD3QC6,这是dz程序的根目录,里面放置的是dz程序。

A、 我的网站刚开始如这样设置的,administrators和system对网站根目录FreeHos具有完全的控制权限。

B、 webdz2013_JD3QC6程序根目录的设置权限是:administrators 完全,system完全,iis来宾账户IUSR_dzusr 读取和运行、列出文件目录和读取,network service 完全控制权限且不是继承父目录的。

结果论坛的最后一步出现上面的错误。

解决方法如下

A、 对网站根目录FreeHos“只有该文件夹”添加iis来宾账户IUSR_dzusr的读权限

标签:[!--infotagslink--]

您可能感兴趣的文章: