Codeigniter删除所有html标签

时间:2011-05-14 02:27:16

标签: php codeigniter

如何使用codeigniter删除所有 HTML标记?我猜你必须使用PHP函数strip_tags,但我想要像XSS过滤的全局设置

由于

2 个答案:

答案 0 :(得分:17)

如果您指的是使用input方法,是的,您可以在技术上打开system/libraries/Input.php,请转到此代码:

/**
* Clean Input Data
*
* This is a helper function. It escapes data and
* standardizes newline characters to \n
*
* @access   private
* @param    string
* @return   string
*/
function _clean_input_data($str)
{
    if (is_array($str))
    {
        $new_array = array();
        foreach ($str as $key => $val)
        {
            $new_array[$this->_clean_input_keys($key)] = $this->_clean_input_data($val);
        }
        return $new_array;
    }

    // We strip slashes if magic quotes is on to keep things consistent
    if (get_magic_quotes_gpc())
    {
        $str = stripslashes($str);
    }

    // Should we filter the input data?
    if ($this->use_xss_clean === TRUE)
    {
        $str = $this->xss_clean($str);
    }

    // Standardize newlines
    if (strpos($str, "\r") !== FALSE)
    {
        $str = str_replace(array("\r\n", "\r"), "\n", $str);
    }

    return $str;
}

在xss clean之后,您可以将自己的过滤功能放在这样:

// Should we filter the input data?
if ($this->use_xss_clean === TRUE)
{
    $str = $this->xss_clean($str);
}

$str = strip_tags($str);

但是,这意味着每次更新CodeIgniter时,都必须再次进行此更改。此外,由于这样可以全局地完成所有这一切,因此,如果你要获得的价值是数字,那就没有意义。由于这些原因

Code Igniter Cat Does Not Approve

现在换另一种解决方案,您可以使用CodeIgniter Form Validation库,让您为字段设置自定义规则,包括可以接受一个参数的php函数,例如strip_tags

$this->form_validation->set_rules('usertext', 'User Text', 'required|strip_tags');

我不确定具体情况,所以我会让你决定采取哪种方式,但总的来说我建议在每个案例的基础上处理数据验证,因为在大多数情况下对数据进行验证是独一无二的。

答案 1 :(得分:2)

当我想要消除XSS,HTML并仍然保留用户发布内容(甚至是恶意代码尝试)时,我会使用这个

private function stripHTMLtags($str)
{
    $t = preg_replace('/<[^<|>]+?>/', '', htmlspecialchars_decode($str));
    $t = htmlentities($t, ENT_QUOTES, "UTF-8");
    return $t;
}

第一个正则表达式删除所有具有html格式的内容,并且htmlentities会处理引号和内容。 每次需要真正清理时,都可以在控制器上使用它。快速而简单。

例如,这个非常恶意的str包含大量代码标签和内容

Just another post (http://codeigniter.com) blablabla text blabla:</p>1 from users; update users set password = 'password'; select * <div class="codeblock">[aça]<code><span style="color: rgb(221, 0, 0);">'username'</span><span style="color: rgb(0, 119, 0);">);&nbsp;</span><span style="color: rgb(255, 128, 0);">//&nbsp;filtered<br></span><span style="color: rgb(0, 0, 187);">- HELLO I'm a text with "-dashes_" and stuff '!!!?!?!?!$password&nbsp;</span></span>

&LT; OK&GT;

成为

Just another post (http://codeigniter.com) blablabla text blabla:1 from users; update users set password = 'password'; select * [aça]'username');&nbsp;//&nbsp;filtered- HELLO I'm a text with "-dashes_" and stuff '!!!?!?!?!$password&nbsp; <ok.>

它仍然有代码,但不会对您的数据库执行任何操作。 像

一样使用它
$this->stripHTMLtags($this->input->post('html_text'));

您可以将此功能放入库中,这样您就不必破解CI:)