允许<a> and <b> tags in PHP function?</b></a>

时间:2013-12-08 18:22:47

标签: php html tags preg-replace sanitization

我目前使用此功能来清理用户提交的输入:

// Cleaning input functions
function clean_Input($input) {
    $search = array(
        '@<script[^>]*?>.*?</script>@si', // Strip out javascript
        '@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags
        '@<style[^>]*?>.*?</style>@siU', // Strip style tags properly
        '@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments
    );
    $output = preg_replace($search, '', $input);
    return $output;
}

function sanitize($input) {
    if (is_array($input)) {
        foreach ($input as $var => $val) {
            $output[$var] = sanitize($val);
        }
    } else {
        if (get_magic_quotes_gpc()) {
            $input = stripslashes($input);
        }
        $input  = clean_Input($input);
        $output = mysql_real_escape_string($input);
    }
    return $output;
}

但是,我想对其进行编辑,以便允许<a><b>标记通过。这意味着它将接受链接和粗体标签,并且不会删除它们。

目前,它会删除包含<a>代码和<b>代码的所有HTML代码,如何更改代码以完成上述内容?

如果我知道如何使用preg_replace函数,我会尝试一些东西。但是,我完全陷入困境,并且绝对不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

使用strip_tags是否有任何不妥之处,并将一些标签传递给允许,因此直通?为什么选择Regex?

考虑手册页上的示例:

$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';

// Allow <p> and <a>
echo strip_tags($text, '<p><a>');