2011-03-17 60 views
1

我需要清理textarea字段的表单输入。PHP表单清理?

开始标记可以允许b,strong,i,em,u,br,span,a,p,ul,ol,li - 它也可以有style =“”。但删除所有其他:class =“”,id =“”,javascript等

结束标记只能是</和b,strong,i,em,u,br,span,a,p中的一个,ul,ol,li和>。结束标记内不允许有其他内容。

所有其他括号将被删除与PHP strip_tags。

不知道正则表达式应该是什么样的 - 任何帮助?

喜欢的东西...

$input= strip_tags($input, "<b><strong><i><em><u><br><span><a><p><ul><ol><li>"); 

$input= input_sanitize($input); 
echo $input; 

function input_sanitize($value) { 
    // first, sanitize the opening tags 
    $value = preg_replace(
     "/". 
     "<(b|strong|i|em|u|br|span|a|p|ul|ol|li)". 
     "(.*?)". 
     "(((style\=('|\")(.+?)('|\"))*?)(.*?)((href\=('|\")(.+?)('|\"))*?))". 
     "(.*?)>/im", 
      "<$1 $3 $5>", 
      $value); 
    // second, sanitize the closing tags 
    $value = preg_replace(
     "/<\/(.*?)(b|strong|i|em|u|br|span|a|p|ul|ol|li)(.*?)>/im" 
     "</$2>", 
     $value); 
    return $value; 
} 

任何人都擅长的正则表达式? :D

+1

''...使用DOM解析器! – RobertPitt 2011-03-17 12:48:05

回答

3

说到安全性,我建议使用稳定安全的解决方案,如HTML Purifier

+0

谢谢,我正在寻找类似的东西。 – codemonkey613 2011-03-17 13:00:54