PHP函数用于剥离标记,但列入白名单的标记和属性除外

时间:2010-08-02 11:53:55

标签: php html html-parsing

我必须从用户输入中删除所有HTML标记和属性,除了那些被认为是“安全”的(即白名单方法)。

strip_tags()删除除$allowable_tags参数中列出的标记之外的所有标记。但我还需要能够剥离所有未列入白名单的属性;例如,我想允许<b>标记,但出于显而易见的原因,我不想允许onclick属性。

有没有这样做的功能,还是我必须自己创作?

2 个答案:

答案 0 :(得分:13)

据我所知,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());

答案 1 :(得分:-1)

没有这方面的功能,所以你可能需要写一个。也许,正则表达式可以解决问题。