IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    PHP DOMDocument 在 saveXML 时中文出现乱码

    李惟发表于 2015-02-04 18:17:07
    love 0

    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方法
    无觅


沪ICP备19023445号-2号
友情链接