在Codeigniter中清理html输入

时间:2010-07-09 10:30:05

标签: php codeigniter validation

嗨,伙计们,

我使用CodeIgniter构建应用程序,我遇到了问题。我有一个带有textarea的表单,用户可以使用由jwysiwyg.jquery驱动的简单编辑器来放置文本。问题是需要清理垃圾代码的这个输入(链接直接从Word粘贴的那个)。

使用CodeIgniter中的form_validation库验证表单,并使用以下规则:

array(
 'field' => 'job[description]',
 'label' => 'Description',
 'rules' => 'trim|required|callback_clean_html'
),

然后我有一个clean_html方法只做一个:

return strip_tags($text,'<a><p><br><strong><em><h3><h4><h5><ul><ol><li>');

问题是这个被忽略了,原始文本被插入到数据库中。该方法运行(我已经测试过)。我认为这是因为回调应该返回TRUE或FALSE,但是xss_clean不会返回BOOL。文档没什么帮助。

有没有?

提前致谢。

5 个答案:

答案 0 :(得分:1)

我认为form_validation回调确实需要返回一个bool。我发现当你需要向用户显示错误消息时,form_validation最有用,通常是重新提交表单。虽然准备功能很方便,但它们不需要在那里进行验证。为什么不在提交表单之后但在将表单发送到数据库之前通过strip_tags函数传递提交的字符串?

答案 1 :(得分:0)

您是否尝试删除规则中的callback_?你可以做常规的PHP函数,比如trim,这样就可以了。

答案 2 :(得分:0)

在设置输入规则之后我总是做双重安全的事情我也是通过这个来运行它们

`$string = filter_var($string, FILTER_SANITIZE_STRING);`

这将删除html

我最近遇到的情况是输入完全忽略了已经设定的规则。

答案 3 :(得分:0)

xss_clean和其他CI验证函数返回非bool值。我刚刚测试了CI 1.7.2中的以下回调函数:

function test_string_change($str)
{
    return "$str **";
}

使用callback_test_string_change成功更改了字符串。我知道1.7.0中的回调函数存在一些问题,你使用的是最新版本吗?

答案 4 :(得分:0)

根据您发布的内容,它应该有效。 “callback_”前缀和返回都是正确的。验证方法可以返回非bool,它将替换该值。检查form_validation文档,它明确说明了这一点。

所以你的问题必须在你没有发布的代码的某个地方。