小编Dav*_*age的帖子

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

我遇到了一个类似于这个问题的问题

来自 DomDocument 的 nodeValue 在 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');
Run Code Online (Sandbox Code Playgroud)

UTF-8 数据的原始值似乎即将到来,并且运行 PHP 的系统的基本代码页很可能不是 UTF-8。

一直到解析(使用转储到 DOMDocument 的 HTML5lib 实现)字符串保持干净,UTF-8 友好。仅在使用拉取数据时

$span->nodeValue
Run Code Online (Sandbox Code Playgroud)

我是否看到编码稳定性失败。

我的猜测是,用于将 domdocument 导出到 nodeValue 的 htmlentities 捕获使用了编码转换器,但忽略了内联编码值。

鉴于我的问题与 HTML5 有关,我认为这与实现的新颖性直接相关,但这似乎是一个更广泛的问题。除了开头提到的问题之外,我无法通过搜索找到有关此特定于 DOMDocument 的问题的任何信息。

更新

以前进的名义,我已从 HTML5lib 和 DOMDocument 切换到Simple HTML DOM,它导出干净转义的 html,然后我可以将其解析回正确的 UTF-8 实体。

另外,我没有尝试过的一个功能是

utf8_decode
Run Code Online (Sandbox Code Playgroud)

因此,对于遇到此问题的其他人来说,这可能是一个解决方案。它解决了我在使用 AJAX/PHP 时遇到的一个相关问题,在 2009 年的这篇博客文章中找到了解决方案:克服 AJaX UTF-8 编码限制(在 PHP 中)

php encoding utf-8 character-encoding domdocument

5
推荐指数
1
解决办法
3248
查看次数

标签 统计

character-encoding ×1

domdocument ×1

encoding ×1

php ×1

utf-8 ×1