我将查询字符串作为查询字符串的一部分传递给 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
将;
s 随机添加到键中。我得到这样的结果:
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));