如何在PHP中解码encodeuriccomponent而不将整数转换为字符串



在我的Javascript代码中,我像这样形成我的查询:

let query = "needleKey=" + encodeURIComponent(needle.key)
query += "&needleValue=" + encodeURIComponent(needle.value);
query += "&newData=" + encodeURIComponent(JSON.stringify(newData));
fetch(API, {
method: 'POST',
headers: new Headers({
'Content-Type': 'application/x-www-form-urlencoded', // <-- Specifying the Content-Type
}),
body: query
})
.then(handleErrors)
.then(response => {
resolve(response.text());
})
.catch(err => {
console.error("ERR: Error fetching " + API + query + "n" + err);
reject(err);
});

我在后端用PHP代码收集这个:

if (isset($_REQUEST['needleKey']) && isset($_REQUEST['needleValue'])) {
$needleKey = $_REQUEST['needleKey'];
$needleValue = $_REQUEST['needleValue'];

$filter = [$needleKey => $needleValue];
} else {
echo "ERR: No needle passed to DB server.";
return;
}

我的问题是,如果needle.value在javascript代码是一个整数(即:1234),它最终作为字符串'1234'在PHP代码。我已经尝试过将字符串转换为PHP中的int(并且它有效),但我不想盲目地将所有needleValues转换为整数,因为我有机会希望能够将数字作为字符串传递。

我尝试添加rawurldecode到php代码没有成功。我还尝试了几种不同的方式在javascript中形成查询,但无济于事。

我怎么能传递一个数字从javascript到PHP,并让它保持一个数字?

JavaScript中必须使用JSON.stringify:

query += "&needleValue=" + encodeURIComponent(JSON.stringify(needle.value));

然后在PHP中解码:

$needleValue = json_decode($_REQUEST['needleValue']);

我不确定这是否有效,但你可以试试。

最新更新