除了一组白名单标签和属性之外,PHP函数用于删除HTML标记

4
我需要从用户输入中去除所有HTML标签和属性,除了被认为是“安全”的标签(即白名单方法)。strip_tags()函数会去除除了在$allowable_tags参数中列出的标签之外的所有标签。但我还需要能够去除所有未列入白名单的属性;例如,我想允许标签,但出于明显的原因,我不想允许onclick属性。是否有函数可以实现这个功能,还是说我必须自己编写?
1个回答

14
据我所知,strip_tags 方案是去除无用标签的最快方法。在没有第三方包的情况下,通过DOMDocument检查允许属性也很容易。
$string = strip_tags($string,'<b>');
$dom = new DOMDocument();
$dom->loadHTML($string);
$allowed_attributes = array('id');
foreach($dom->getElementsByTagName('*') as $node){
    for($i = $node->attributes->length -1; $i >= 0; $i--){
        $attribute = $node->attributes->item($i);
        if(!in_array($attribute->name,$allowed_attributes)) $node->removeAttributeNode($attribute);
    }
}
var_dump($dom->saveHTML());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接