PHP DOMDocument nodeValue转储文字UTF-8字符而不是编码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP DOMDocument nodeValue转储文字UTF-8字符而不是编码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1494字,纯文字阅读大概需要3分钟。
内容图文
我遇到类似于this question的问题:
nodeValue from DomDocument returning weird characters in PHP
我找到的根本原因可以用mb_convert_encoding()来模仿
在我的单元测试中,这终于解决了这个问题:
$test = mb_convert_encoding('é', "UTF-8");
$this->assertTrue(mb_check_encoding($test,'UTF-8'),'data is UTF-8');
$this->assertTrue($this->rw->checkEncoding($test,'UTF-8'),'data is UTF-8');
$this->assertIdentical($test,html_entity_decode('é',ENT_QUOTES,'UTF-8'),'values match');
UTF-8数据的原始值似乎即将结束,运行PHP的系统的基本代码页很可能不是UTF-8.
一直到解析(使用转储到DOMDocument的HTML5lib实现)字符串保持干净,UTF-8友好.仅在使用数据提取时
$span->nodeValue
我是否看到编码稳定性失败.
我的猜测是,domdocument导出到nodeValue的htmlentities catch使用了编码转换器,但忽略了内联编码值.
鉴于我的问题是HTML5,我认为它与实现的新颖性直接相关,但它似乎是一个更广泛的问题.除了开头提到的问题之外,我无法通过搜索找到有关DOMDocument特定问题的任何信息.
UPDATE
以前进的名义,我已经从HTML5lib和DOMDocument切换到Simple HTML DOM,它导出干净的转义html,然后我可以解析回正确的UTF-8实体.
另外,我没试过的一个功能是
utf8_decode
这对于遇到此问题的其他人来说可能是一个解决方案.它解决了我在AJAX / PHP中遇到的一个相关问题,这个解决方案发现于2009年的这篇博文:Overcoming AJaX UTF-8 Encoding Limitation (in PHP)
解决方法:
刚刚在nodeValue上使用utf8_decode,它确实有点工作,有特殊字符无法正确显示的问题.
但是,某些字符仍然存在问题,例如简单引用’和其他一些字符(例如)
所以使用$element-> nodeValue将不起作用,但utf8_decode($element-> nodeValue)将 – PARTLY.
内容总结
以上是互联网集市为您收集整理的PHP DOMDocument nodeValue转储文字UTF-8字符而不是编码全部内容,希望文章能够帮你解决PHP DOMDocument nodeValue转储文字UTF-8字符而不是编码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。