如何通过DOMDocument禁用自动实体

时间:2014-09-01 13:19:11

标签: php domdocument

我正在使用DOMDocument解析HTML字符串。我这样加载它:

$dom = new DOMDocument();
$dom->loadHTML('<?xml encoding="UTF-8"><div id="container">'.$text.'</div>', LIBXML_NOENT);

然后,我正在运行一些XPath查询和节点替换它。 (即使我注释掉这些动作,角色仍然会被取代。)最后,我将这样保存:

$parsed = $dom->saveHTML();

但DOMDocument似乎正在用其实体表示替换非ASCII字符。例如,捷克语中的字符串:

ěščřžýáíé

返回:

&#283;&scaron;&#269;&#345;&#382;&yacute;&aacute;&iacute;&eacute;

我无法使用html_entity_decode(),因为它突破了已突出显示且已正确转义的源代码。

如何通过DOMDocument禁用自动替换实体的非ASCII字符(所以,上面的示例也将返回ěščřžýáíé)?

2 个答案:

答案 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">