【问题标题】:Clean html input in Codeigniter在 Codeigniter 中清理 html 输入
【发布时间】:2010-07-09 10:30:04
【问题描述】:

大家好,

我使用 CodeIgniter 构建了一个应用程序,但遇到了问题。我有一个带有文本区域的表单,用户使用由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。文档帮助不大。

有什么想法吗?

提前致谢。

【问题讨论】:

  • 我建议不要使用库中的form_validation.php,而是单独写一个

标签: php codeigniter validation


【解决方案1】:

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

【讨论】:

  • 我会这样做,我只是觉得在一个地方完成所有数据准备会很好,哦,好吧。感谢您的回复。
【解决方案2】:

您是否尝试在规则中删除callback_?您可以执行常规的 PHP 函数,例如 trim,所以这应该可以工作。

【讨论】:

    【解决方案3】:

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

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

    这将去掉 html

    我最近也遇到过输入完全忽略已设置规则的情况。

    【讨论】:

      【解决方案4】:

      xss_clean 和其他 CI 验证函数返回非布尔值。我刚刚在 CI 1.7.2 版本中测试了以下回调函数:

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

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

      【讨论】:

        【解决方案5】:

        从您发布的内容来看,它应该可以工作。 “callback_”前缀和返回都是正确的。验证方法可以返回非布尔值,它将替换值。查看 form_validation 文档,它明确说明了这一点。

        所以你的问题一定出在你没有发布的代码的某个地方。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-27
          • 2010-12-07
          • 2016-01-29
          • 2013-01-23
          • 2018-02-16
          • 1970-01-01
          • 2021-12-25
          • 1970-01-01
          相关资源
          最近更新 更多