我将查询字符串作为查询字符串的一部分传递给PHP脚本。parse_str随机向密钥添加分号
有点像这样:
$.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));
我会首先做一个$ filters的var_dump来看看会发生什么。 –
您是否在Ajax请求中看到奇怪的东西?或者只有PHP的问题?你可以使用静态字符串来重现问题,比如'parse_str(“users =&companies = ...”)'? – Tchoupi
嗯:'$ this-> input-> post('filters')'似乎包含';'字符。看起来不是'parse_str'的错。 –