Php CodeIgniter 2.0输入库字符问题

Php CodeIgniter 2.0输入库字符问题,php,codeigniter-2,Php,Codeigniter 2,我正在应用程序中使用codeigniter。有一张表格。在textarea元素中,我写了一些东西,包括 %Features% 然而,当我想通过$this->input->post(key)来回应这个问题时,我会得到如下结果 �饱和度% “%Fe”已消失 在CI的main index.php文件中,我尝试了var\u dump($\u POST),我看到上面的单词完全正确。但是当我使用输入库获取它时(xss过滤处于启用状态),我就遇到了问题 当XSS过滤关闭时,它最初显示为ok。然而,若我将其存

我正在应用程序中使用codeigniter。有一张表格。在textarea元素中,我写了一些东西,包括

%Features%
然而,当我想通过$this->input->post(key)来回应这个问题时,我会得到如下结果
�饱和度%

“%Fe”已消失

在CI的main index.php文件中,我尝试了
var\u dump($\u POST)
,我看到上面的单词完全正确。但是当我使用输入库获取它时(xss过滤处于启用状态),我就遇到了问题


当XSS过滤关闭时,它最初显示为ok。然而,若我将其存储在数据库中并在下次显示,我会看到相同的问题(即使xss过滤已关闭)

%Fe
恰好看起来像URL编码的序列
%Fe
,表示字符254。它被咀嚼成Unicode“我不知道那个序列意味着什么”字形,�.

很明显,“XSS过滤器”在对提交的字段进行解码时过于热心


当您从数据库输出结果时,URL解码也很可能在过程的稍后某个点再次运行。检查数据库以确保正确表示实际字符串。

首先:在将变量存储到数据库之前,先转义变量。%在SQL中有特殊的含义


第二个:%s在URL中也有特殊含义,例如%20是%FE将映射到某个字符,该字符将由input()解码。

CI本身在存储到数据库之前将值转义。@HungryCoder,不是true,取决于程序员如何更新/插入它们。@jakub,感谢您的输入。我在使用ActiveRecord时讲述了我的场景!嗨,我刚找到问题所在。这是form_验证库的问题。xss_清理规则已应用于该字段。当我去掉它时,它工作得很好。这意味着如果xss_clean是全局启用的(在config.php中),或者如果xss_clean筛选器是在表单验证中运行的,则会导致问题。到目前为止,唯一的解决办法是禁用它:(。还有进一步的想法吗?