Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当字符串包含符号和符号时,在值的末尾附加分号_Php_Codeigniter - Fatal编程技术网

Php 当字符串包含符号和符号时,在值的末尾附加分号

Php 当字符串包含符号和符号时,在值的末尾附加分号,php,codeigniter,Php,Codeigniter,我正在使用Codeginiter,我看到在使用符号和符号时在字符串的末尾添加了一个分号。见下文。顺便说一句,我正在将值存储到MySQL数据库中 在将值插入数据库之前,我正在使用htmlspecialchars $this->form_validation->set_rules('item_name','description','trim|required|min_length[3]|xss_clean'); 这项工作: $string = "you & I"

我正在使用Codeginiter,我看到在使用符号和符号时在字符串的末尾添加了一个分号。见下文。顺便说一句,我正在将值存储到MySQL数据库中

在将值插入数据库之前,我正在使用
htmlspecialchars

$this->form_validation->set_rules('item_name','description','trim|required|min_length[3]|xss_clean');       
这项工作:

$string = "you & I";
// Displays "you & i"
这会在DB中附加分号:

$string = "you&i";   
// Displays "you&i;"

我认为这是因为
&I
被解释为实体。我建议您将所有html特殊字符(如
&
等)转换为各自的字符。在php中,您可以使用和函数来实现这一点。

您正在使用刚刚被破坏的CI的
xss_clean
功能。如果你在某个地方应用
xss\u clean
的话,不要期望你的数据能够保存下来

相反,禁用它,事情就会好起来


然后适当地过滤数据。实际使用
xss_clean
的建议只是CodeIgniter文档中的误导。小心。

在将数据保存到数据库之前,POST数据已被污染

顺便说一下,我也在使用CI框架

例如,客户端post数据
Cow&Gate/英国牛栏
使用普通表单post方法,在PHP服务器端会得到什么

你会得到
Cow&Gate/英国牛栏
奇怪的是,添加了一个分号

如果使用XML(或ajax或jquery)发布数据,则可以在将数据发布到服务器之前使用javascript中的
encodeURIComponent
方法对数据进行编码,而无需在PHP服务器端进行任何额外工作

像这样:
$.post('http-server-API',{“field”:encodeURIComponent('Cow&Gate/英国牛栏')})

检查PHP服务器端的$\u POST参数(不会添加分号)

所以改用
htmlentities
吧?谢谢Aaron,我在谷歌上搜索了一下,什么也没发现。我猜
xss_clean
是罪魁祸首。哇,就是这样。我删除了
xss_clean
,效果很好。我应该用别的东西代替它吗?你问的这个事实清楚地表明你不知道你实际上做了什么。如果你想确保对应用程序进行编码时,您必须首先学习输入、输出和编码的基础知识。那么您可以做些什么呢?通过知识而不是猜测进行适当的过滤。我的意思是,如果有另一个内置的CI函数。我将使用一些标准PHP函数进行过滤。是的,按照标准进行过滤,它们的工作更加具体,因此您可以找到这项工作需要做的事情。避免使用CI的内置函数进行任何与安全相关的操作。Thx hakre,我从来不知道筛选函数。非常感谢。HTML转义属于输出逻辑。(虽然安全比抱歉好,而且过早地这样做本身并没有错,但这不是推荐的方法。尽管这里的问题只是一个过度热情的实现。)