我正在使用DOMDocument解析HTML字符串。我这样加载它:
$dom = new DOMDocument();
$dom->loadHTML('<?xml encoding="UTF-8"><div id="container">'.$text.'</div>', LIBXML_NOENT);
然后,我正在运行一些XPath查询和节点替换它。 (即使我注释掉这些动作,角色仍然会被取代。)最后,我将这样保存:
$parsed = $dom->saveHTML();
但DOMDocument似乎正在用其实体表示替换非ASCII字符。例如,捷克语中的字符串:
ěščřžýáíé
返回:
ěščřžýáíé
我无法使用html_entity_decode()
,因为它突破了已突出显示且已正确转义的源代码。
如何通过DOMDocument禁用自动替换实体的非ASCII字符(所以,上面的示例也将返回ěščřžýáíé
)?
答案 0 :(得分:0)
$dom = new DOMDocument();
$text = <div id="container">'.$text.'</div>';
$text = mb_convert_encoding($text, 'HTML-ENTITIES', "UTF-8");
$dom->encoding='UTF-8';
$dom->loadHTML($text);
好的,您是否尝试更改方法:
$dom->loadXML();
默认它使用utf-8,但$ text必须是xhtml格式化的 如果$ text没有格式化,请尝试:
$dom->loadHTML('<meta charset="utf-8"/>'.$text);
如果您从浏览器中读取数据,请尝试以下操作:
echo '<meta charset="utf-8" />';
echo $parsed;
答案 1 :(得分:0)
最后,我有一个解决方案。这很简单,而不是<?xml encoding="UTF-8">
使用<meta http-equiv="content-type" content="text/html;charset=utf-8">
。