我正在尝试获取网页的HTML并去除<script>
标签。我可以获取 HTML(通过使用 cURL
(,但我无法使用 PHP 的 DOMDocument
剥离<script>
标签。剥离标签只是我想用 DOMDocument 做的一件事,所以我不能使用其他解决方案(好吧,我想我可以使用其他一些 DOM 解析器,但我只想知道如何修复它(。
我的代码:
function clean_html(&$html, $targets = array('script'))
{
$doc = new DOMDocument();
$doc->loadHTML($html); // here I get the error
foreach($targets as $target) {
$tags = $doc->getElementsByTagName($target);
$length = $tags->length;
for ($i = 0; $i < $length; $i++) {
$tags->item(0)->parentNode->removeChild($tags->item(0));
}
}
return $doc->saveHTML();
}
$html = get_html('http://www.google.nl'); // this gets the HTML using cURL.
clean_html($html);
错误(很多这些 +/- 20(:
警告:DOMDocument::loadHTML(( [domdocument.loadhtml]: htmlParseEntityRef: 在 Entity 中没有名称,第 24 行在 C:...''code''views''index.phtml 在第 22 行
我从 cURL 调用中得到的 HTML:
http://pastebin.com/TrV99wAr
有没有办法让 DOMDocument 修复错误或至少让它解析 html 的其余部分?
安全第一
对于HTML输入的清理,只有一种工具可以保护您。如果不是您自己管理的数据,则始终必须使用此工具。(甚至比,如果有人获得您的登录数据,使用它可能会更好(。
始终使用 HTMLPurifier:
它可能需要大量资源,但其他一切都像用枪指着您的基础设施。http://htmlpurifier.org/
我无法重现您的错误。
因此,我想这可能是特定于版本/平台的错误。 我在WinXP,Pro,x86,SP3/PHP5.3.3上进行了测试
该错误意味着您的 HTML 中有一个不是 HTML 实体的&
。这些应始终编码为 &
。