PHP的DOM内部是utf8机制的。在loadHTML时,是通过检查字符中meta的charset来设置编码的。如果没有charset,就当iso8859进行处理了。而这种情况下进行saveXML时,输出来的却是utf8,所以就看到乱码了。
这么说是不是还不太理解,举个例子:
$xml = new DOMDocument(); @$xml->loadHTML('我就是测试看看 - http://levi.cg.am'); $dom = new DOMXPath($xml); echo $dom->query('//div')->item(0)->saveXML();
打开网页执行,你会发现输出乱码了。那如何解决这个问题呢?有两种方式。
第一种:在loadHTML的时候指定编码,下面这段代码引用自php.net官方文档中的回复
$doc = new DOMDocument(); $doc->loadHTML('' . $html); // dirty fix foreach ($doc->childNodes as $item) if ($item->nodeType == XML_PI_NODE) $doc->removeChild($item); // remove hack $doc->encoding = 'UTF-8'; // insert proper
第二种方法,通过iconv对输出的字符重新转换,代码如下:
echo iconv("UTF-8", "GB18030//TRANSLIT", $dom->saveXML($n) );
您可能也喜欢: |
命令提示行连接mysql乱码的解决 |
解决 json_encode 中文乱码 |
PHP验证码类 |
php网址编码转换函数rawurlencode()和urlencode() |
2种中文截取无乱码的PHP方法 |
无觅 |