PHP表单清理?

时间:2011-03-17 12:25:30

标签: php regex

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

开头标签可以允许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和&gt;中的一个。结束标记内不允许任何其他内容。

所有其他括号将使用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 个答案:

答案 0 :(得分:3)

在安全方面,我建议使用稳定安全的解决方案,例如HTML Purifier