php中DOMDocument对于xml操作我们只要是英文是没有问题了,但如果是中文字体就会有乱码问题了,下面我们就此问题给各位介绍一些解决办法吧.
PHP的DOM内部是utf8机制的,在loadHTML时,是通过检查字符中meta的charset来设置编码的,如果没有charset,就当iso8859进行处理了,而这种情况下进行saveXML时,输出来的却是utf8,所以就看到乱码了.
这么说是不是还不太理解,举个例子:
1
2
3
4
|
$xml = new DOMDocument(); @ $xml ->loadHTML( '<div>我就是测试看看</div>' ); $dom = new DOMXPath( $xml ); echo $dom ->query( '//div' )->item(0)->saveXML(); |
打开网页执行,你会发现输出乱码了,那如何解决这个问题呢?有两种方式.
第一种:在loadHTML的时候指定编码,下面这段代码引用自php.net官方文档中的回复,代码如下:
1
2
3
4
5
6
7
8
9
10
|
$doc = new DOMDocument(); $doc ->loadHTML( '<?xml encoding="UTF-8">' . $html ); foreach ( $doc ->childNodes as $item ) { if ( $item ->nodeType == XML_PI_NODE) { $doc ->removeChild( $item ); // remove hack } } $doc ->encoding = 'UTF-8' ; // insert proper |
第二种方法:通过iconv对输出的字符重新转换,代码如下:
1
|
echo iconv( "UTF-8" , "GB18030//TRANSLIT" , $dom ->saveXML( $n ) ); |
以上所述是小编给大家介绍的PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!