我传递一个查询字符串作为我的查询字符串到PHP脚本的一部分。
有点像这样:
$.post('/url', {
id: postID
filters: $('#form').serialize()
});
然后在我的PHP,我使用parse_str
阅读filters
:
<?php
$postID = $this->input->post('id');
parse_str($this->input->post('filters'), $filters);
的问题是, parse_str
被加入;
š随机的密钥。 我得到这样的结果:
array(4) {
["users"]=>
string(0) ""
["companies;"]=>
string(0) ""
["pref;_123"]=>
string(0) ""
["products;"]=>
array(2) {
[0]=>
string(4) "1234"
[1]=>
string(4) "5678"
}
}
为什么服务器增加;
? 我试了一下另一台服务器上,而不会发生这种情况。 它还通过CLI测试时不会发生。
编辑 :看来这不是parse_str
的错,而是某种XSS过滤器。 $this->input->post('filters')
甚至$_POST['filters']
包含;
字符。 我查了一下,和jQuery不加入他们。
编辑 :我设法通过做“修理”这样的:
$filters = array_combine(array_map(function($x){
return str_replace(';', '', $x);
}, array_keys($filters)), array_values($filters));