Php 当字符串包含符号和符号时,在值的末尾附加分号
我正在使用Codeginiter,我看到在使用符号和符号时在字符串的末尾添加了一个分号。见下文。顺便说一句,我正在将值存储到MySQL数据库中 在将值插入数据库之前,我正在使用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"
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转义属于输出逻辑。(虽然安全比抱歉好,而且过早地这样做本身并没有错,但这不是推荐的方法。尽管这里的问题只是一个过度热情的实现。)