我正在使用下面的代码来获取DOMDocument所需的内容表格,
$subject = 'some html code';
$doc = new DOMDocument('1.0');
$doc->loadHTML($subject);
$xpath = new DOMXpath($doc);
$result = $xpath->query("//div");
$docSave = new DOMDocument('1.0');
foreach ( $result as $node ) {
$domNode = $docSave->importNode($node, true);
$docSave->appendChild($domNode);
}
echo $docSave->saveHTML();
问题在于,如果HTML $主题中有一个特殊字符,如空格或新行,那么它将转换为html权限。输入HTML远远不是好的风格,一些特殊字符也在标签的路径中,例如:
$subject = '<div><a href='http://www.site.com/test.php?a=1&b=2, 3,
4'></a></div>';
将产生:
<div><a href='http://www.site.com/test.php?a=1&b=2,%203,%0A%204'></a></div>
而不是:
<div><a href='http://www.site.com/test.php?a=1&b=2, 3,
4'></a></div>'
如果想要保留无效的html,可以做些什么来省略特殊字符到其实体的转换?
我尝试将此标志substituteEntities设置为false,但我没有改进,也许我用错了?一些代码示例非常有用。
答案 0 :(得分:2)
您无法使用解析器并能够操纵错误的HTML。解析器会清理HTML以便解析它。
如果您绝对必须使用错误的HTML,请使用正则表达式,但要注意头部受伤的风险极大,因为您要么 - 或者将头撞到桌面上太多。