当字符串包含&符号时,值末尾的额外分号

时间:2011-10-22 16:13:36

标签: php codeigniter

我正在使用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;"

3 个答案:

答案 0 :(得分:4)

您正在使用CI的xss_clean“功能”。如果您在某处应用xss_clean,请不要指望您的数据存活。

相反,禁用它,事情应该没问题。

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

答案 1 :(得分:1)

我认为这是因为&i被解释为实体。我建议你将所有html特殊字符(&<>等)转换为各自的htmlentities。在php中,您可以使用htmlspecialcharshtmlentities函数执行此操作。

答案 2 :(得分:0)

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

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

示例,客户端发布数据
  Cow&Gate/英国牛栏
使用普通表单post方法,以及在PHP Server Side中可以得到什么?

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

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

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

检查PHP Server Side中的$ _POST参数(不添加分号)
enter image description here