我必须从用户输入中除去被认为“安全”的所有HTML标签和属性(即白名单方法)。PHP函数去除标签,除了白名单标签和属性列表
strip_tags()除去$allowable_tags
参数中列出的标签以外的所有标签。但我也需要能够剥离所有未列入白名单的属性;例如,我想允许<b>
标记,但我不想让onclick
属性出于显而易见的原因。
有没有这样的功能,还是我必须自己做?
我必须从用户输入中除去被认为“安全”的所有HTML标签和属性(即白名单方法)。PHP函数去除标签,除了白名单标签和属性列表
strip_tags()除去$allowable_tags
参数中列出的标签以外的所有标签。但我也需要能够剥离所有未列入白名单的属性;例如,我想允许<b>
标记,但我不想让onclick
属性出于显而易见的原因。
有没有这样的功能,还是我必须自己做?
据我所知,strip_tags
解决方案即将摆脱不必要的标签的最快方式,并禁止第三方包,检查允许的属性将是DOM文档很容易,
$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());
没有这个功能,所以你可能不得不写一个。也许,一个正则表达式可以做到这一点。
你不能用正则表达式解析HTML。 – 2010-08-02 12:13:14
...他来了! http://stackoverflow.com/a/1732454/553609 – 2013-07-23 06:53:48
实现并完美工作。谢谢! – 2010-08-02 20:50:47