我將查詢字符串作爲查詢字符串的一部分傳遞給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'的錯。 –