Cli*_*ive 8 html php domdocument
我正在DOMDocument使用该loadHTML()函数导入一些任意HTML ,例如:
$html = '<p><a href="test.php">Test</a></p>';
$doc = new DOMDocument;
$doc->loadHTML($html);
Run Code Online (Sandbox Code Playgroud)
然后我想使用DOMDocument我没有问题的方法更改一些属性/节点值.
一旦我做了这些更改,我就想导出HTML字符串(使用->saveHTML()),而不会自动添加到HTML中的<html><body>...标记DOMDocument.
我理解为什么要添加这些(以确保有效的文档),但是我如何才能将我编辑的HTML(特别是<body>标签之间的所有内容)都用到了?
我已阅读这篇文章,虽然它提供了一些解决方案,但我宁愿"正确"这样做,即不在<body>标签上使用字符串替换.HTML的有效性不是问题,因为它预先通过HTML净化器运行.
有任何想法吗?谢谢.
编辑
我知道在PHP 5.3.6中$node添加了参数saveHTML(),不幸的是我坚持使用5.2.
也许这个源代码会有所帮助 - 他们正在使用正则表达式来删除不必要的字符串:
\n\nhttp://beerpla.net/projects/smartdomdocument-a-smarter-php-domdocument-class/
\n\n$content = preg_replace(array("/^\\<\\!DOCTYPE.*?<html><body>/si",\n "!</body></html>$!si"),\n "",\n $this->saveHTML());\n\nreturn $content;\nRun Code Online (Sandbox Code Playgroud)\n\nsaveHTMLExact() - DOMDocument 有一个设计极其糟糕的“功能”,如果您正在加载的 HTML 代码不包含<html>和<body>标签,它会自动添加它们(是的,没有标志可以关闭此行为)。
因此,当您调用 $doc->saveHTML() 时,新保存的内容现在包含<html><body>和DOCTYPE。当尝试使用代码片段时不太方便(XML 也有类似的问题)。
SmartDOMDocument 包含一个名为 saveHTMLExact() 的新函数,它完全符合您的要求 \xe2\x80\x93 它保存 HTML,而不会像 DOMDocument 那样添加额外的垃圾。
\n\n此外,其他问题也提出了类似的问题:
\n\n如何在没有 HTML 包装器的情况下保存 DOMDocument 的 HTML?
\n| 归档时间: |
|
| 查看次数: |
3787 次 |
| 最近记录: |