2012-02-04 66 views
0

我正在使用的代码为波纹管获得通过DOM文档的内容通缉形式HTML,如何关闭将特殊字符转换为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 $主题像空间或新线spcial字符,则转换到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为假,但我没有改善,也许我用它错了?一些代码示例会非常有帮助。

+0

我认为他们完全没问题。这两个网址都有效且相同。 – 2012-02-04 17:05:40

+0

这些不是HTML实体。它们是URL特定的转义。至少libxml的PHP前端[不提供任何选项](http://php.net/manual/en/libxml.constants.php)来影响这种规范化。 – mario 2012-02-04 17:08:40

+0

[空格和换行符在URL中实际上是无效的。](http://stackoverflow.com/questions/1547899/which-characters-make-a-url-invalid/1547940#1547940)这只是浏览器(或DOMDocument),它可以正确处理它们。 – Gumbo 2012-02-04 17:09:01

回答

2

您不能使用解析器并能够处理错误的HTML。解析器会清理HTML以解析它。

如果您绝对必须使用错误的HTML,请使用正则表达式,但请注意,头部受伤的风险极高,因为您可能会被打碎,或者头部靠得太近。

相关问题