为什么如果验证失败,Codeigniter会自动转换表单验证类中的特殊实体?


Why does Codeigniter automatically convert special entities in the form validation class if validation fails?

我直到现在才意识到这一点,但是当使用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函数来预填充值,但在我的情况下,我正在做一些不允许我使用该函数的其他事情。

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

if ($total_errors > 0)
{
    $this->_safe_form_data = TRUE;
}