当前位置:首页 > PHP教程 > php应用 > 列表

PHP DOMDocument保存xml时中文出现乱码

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-08 13:19:20 浏览: 评论:0 

php中DOMDocument对于xml操作我们只要是英文是没有问题了,但如果是中文字体就会有乱码问题了,下面我们就此问题给各位介绍一些解决办法吧.

PHP的DOM内部是utf8机制的,在loadHTML时,是通过检查字符中meta的charset来设置编码的,如果没有charset,就当iso8859进行处理了,而这种情况下进行saveXML时,输出来的却是utf8,所以就看到乱码了.

这么说是不是还不太理解,举个例子:

  1. $xml = new DOMDocument(); 
  2. @$xml->loadHTML('<div>我就是测试看看 - http://www.phpfensi.com</div>'); 
  3.  
  4. $dom = new DOMXPath($xml); 
  5. echo $dom->query('//div')->item(0)->saveXML(); 

打开网页执行,你会发现输出乱码了,那如何解决这个问题呢?有两种方式.

第一种:在loadHTML的时候指定编码,下面这段代码引用自php.net官方文档中的回复,代码如下:

  1. $doc = new DOMDocument(); 
  2. $doc->loadHTML('<?xml encoding="UTF-8">' . $html); 
  3. //开源软件:phpfensi.com 
  4. // dirty fix 
  5. foreach ($doc->childNodes as $item
  6.     if ($item->nodeType == XML_PI_NODE) 
  7.         $doc->removeChild($item); // remove hack 
  8. $doc->encoding = 'UTF-8'// insert proper 

第二种方法:通过iconv对输出的字符重新转换,代码如下:

echo iconv("UTF-8", "GB18030//TRANSLIT", $dom->saveXML($n) );

Tags: DOMDocument PHP中文乱码

分享到: