2011-03-17 45 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