来自DOMDocument的nodeValue在PHP中返回奇怪的字符
Posted
技术标签:
【中文标题】来自DOMDocument的nodeValue在PHP中返回奇怪的字符【英文标题】:nodeValue from DOMDocument returning weird characters in PHP 【发布时间】:2011-01-02 18:11:12 【问题描述】:所以我正在尝试解析 html 页面并使用 get_elements_by_tag_name('p');
查找段落 (<p>
)
问题是当我使用$element->nodeValue
时,它返回了奇怪的字符。文档首先使用 curl 加载到 $html
中,然后将其加载到 DOMDocument 中。
我确定这与字符集有关。
这是一个响应示例:“aujourd’hui”。
提前致谢。
【问题讨论】:
在这个特定示例中,html 页面的编码是什么? php DOMDocument loadHTML not encoding UTF-8 correctly 的可能重复项 【参考方案1】:我遇到了同样的问题,现在注意到 loadHTML() 不再需要 2 个参数,所以我必须找到不同的解决方案。在我的 DOM 库中使用以下函数,我能够从我的 HTML 内容中删除时髦的字符。
private static function load_html($html)
$doc = new DOMDocument;
$doc->loadHTML('<?xml encoding="UTF-8">' . $html);
foreach ($doc->childNodes as $node)
if ($node->nodeType == XML_PI_NODE)
$doc->removeChild($node);
$doc->encoding = 'UTF-8';
return $doc;
【讨论】:
【参考方案2】:我通过强制转换为 UTF-8 来解决此问题,即使原始文本是 UTF-8:
$text = iconv("UTF-8", "UTF-8", $text);
$dom = new SmartDOMDocument();
$dom->loadHTML($webpage, 'UTF-8');
.
.
echo $node->nodeValue;
PHP 很奇怪 :)
【讨论】:
【参考方案3】:显然对我来说以上都不起作用,最后我发现了以下内容:
// Create a DOMDocument instance
$doc = new DOMDocument();
// The fix: mb_convert_encoding conversion
$doc->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
Source and more info
【讨论】:
【参考方案4】:这是一个编码问题。尝试将编码显式设置为 UTF-8。
这应该会有所帮助:http://devzone.zend.com/article/8855
【讨论】:
已经试过了,但是没有用...有趣的是,如果我执行 $doc->saveHTML(),返回的 html 的编码是完全正确的。 HTML 中指定的<meta http-equiv="Content-type" ... />
是什么?以上是关于来自DOMDocument的nodeValue在PHP中返回奇怪的字符的主要内容,如果未能解决你的问题,请参考以下文章
带有 PhpWord 的隐蔽 HTML:错误 - DOMDocument::loadXML(): 实体中未定义 p 上的命名空间前缀 o
JS nodeValue属性 和 innerText属性 获取文本