我正在尝试获取网页的HTML并删除<script>
标记。我可以获取HTML(使用cURL
),但我无法使用PHP的<script>
删除DOMDocument
标记。剥离标签只是我想用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:实体中没有名称,第24行:C:... \ code \ views \ index.phtml第22行
我从cURL电话中获得的HTML:
有没有办法让DOMDocument修复错误或者至少让它解析其余的html?
答案 0 :(得分:2)
对于HTML-Input的清理,只有一个可以保护您的工具。 如果不是您自己管理的数据,则必须始终使用此工具。 (甚至,如果有人获得您的登录数据,最好使用它)。
始终使用HTMLPurifier:
可能需要资源,但其他一切就像用枪指着你的基础设施。 http://htmlpurifier.org/
因此我猜测它可能是版本/平台特定的错误。我在WinXP,Pro,x86,SP3 / PHP5.3.3上进行了测试
答案 1 :(得分:0)
该错误表示HTML中的&
不是HTML实体。这些应始终编码为&
。