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('<div>我就是测试看看 - http://levi.yii.so</div>');
    
    $dom = new DOMXPath($xml);
    echo $dom->query('//div')->item(0)->saveXML();

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

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

    $doc = new DOMDocument();
    $doc->loadHTML('<?xml encoding="UTF-8">' . $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) );
    您可能也喜欢:

    使用CloudFlare提升网站的访问体验和安全性

    linux使用crontab实现PHP执行定时任务

    WEB前端底层知识--浏览器是如何工作的

    初识 jQuery Deferred

    Node.js开发指南——第3章安装Node.js快速入门(一)
    无觅


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