1

直到现在我才意识到这一点,但是在使用 CodeIgniter 表单验证类时,如果验证失败($this->form_validation->run() === FALSE),post 变量中的所有特殊字符都会被转换,包括任何文本输入中的单引号或双引号。有没有办法关闭这种行为?我使用 html_escape 命令预先填写了项目中的所有表单,如下所示:

<input value="<?php echo html_escape($this->input->post('value'));?>" />

html_escape 最终第二次执行 htmlspecialchars,在表单中显示 html 实体。我没有设置任何使用“prep_for_form”的规则,并且XSS被关闭,所以我不知道为什么CI会选择为我做这件事。

另外,我确实知道用于预填充值的 set_value 函数,但就我而言,我正在做其他一些不允许我使用该函数的事情。

任何帮助表示赞赏。

4

1 回答 1

0

原来这只是内置的。如果您想在表单验证未通过时关闭表单准备,只需使用 MY_Form_validation.php 扩展 form_validation 类,复制原始 run() 函数,并注释掉以下代码:

if ($total_errors > 0)
{
    $this->_safe_form_data = TRUE;
}
于 2013-06-13T17:13:32.283 回答