加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

PHP DOMDocument nodeValue转储文字UTF-8字符而不是编码

发布时间:2021-08-28 03:43:09 所属栏目:大数据 来源: https://www.jb51.cc
导读:我遇到类似于this question的问题: nodeValue from DomDocument returning weird characters in PHP 我找到的根本原因可以用mb_convert_encoding()来模仿 在我的单元测试中,这终于解决了这个问题: $test = mb_convert_encoding('é', "UTF-8");$this-asser

我遇到类似于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.

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读