0

我遇到了一个问题,如果我提交单引号 ( ' ) 或双引号 ( " ) 之类的字符,并且如果我在提交表单后保留这些值(例如,由于验证失败),我会得到像 ' 这样的表单值和 ”

我尝试了很多东西,比如 -

  • $this->input->post("field", true)通过而不是访问表单值$_POST
  • 从配置中启用 XSS 过滤,
  • 使用$this->security->xss_clean($data);

但没有任何帮助。最后,我去了 system\helpers\form_helper.php 并在第 177 行更改了函数 form_input 如下 -

上一个$defaults = array('type' => 'text', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);

之后$defaults = array('type' => 'text', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => html_entity_decode($value, ENT_QUOTES, 'UTF-8'));

到目前为止,这已经解决了我的问题,没有任何中断。

我只想知道这是否是达到目的的正确方法?

4

1 回答 1

1

我不太确定您遇到的问题,但编辑系统文件来修复它不是一个好主意。您永远不应该更改系统文件夹中的任何内容,进行更改的正确方法是通过创建文件application/helpers/MY_form_helper.php(使用您自己的前缀,在 中定义application/config/config.php)来扩展表单助手,并在文件内部覆盖您要更改的功能。它应该看起来像这样......

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

if ( ! function_exists('form_input'))
{
    /**
    * Text Input Field
    *
    * @param    mixed
    * @param    string
    * @param    string
    * @return   string
    */
    function form_input($data = '', $value = '', $extra = '')
    {
        $defaults = array(
            'type' => 'text',
            'name' => is_array($data) ? '' : $data,
            'value' => html_entity_decode($value, ENT_QUOTES, 'UTF-8')
        );
        return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
    }
}

/* End of file MY_form_helper.php */
/* Location: ./application/helpers/MY_form_helper.php */
于 2014-12-30T22:55:23.377 回答