gpt4 book ai didi

php - 为什么 PHP cURL 会丢弃数字键?

转载 作者:搜寻专家 更新时间:2023-10-31 20:35:50 24 4
gpt4 key购买 nike

我正在尝试使用 cURL 发布包含数字索引的数组,但 curl_setopt 正在删除数字索引。我使用的是 PHP 版本 5.3.29。

这是我设置的一个简单脚本来说明正在发生的事情:

<?php

$is_curled = isset($_GET['curl']) ? !!$_GET['curl'] : false;

if (!$is_curled) {
$url = $_SERVER['SCRIPT_URI'] . '?curl=1';

$_POST['1'] = 'test1234'; // dropped because numeric
$_POST[234] = 'test3211'; // dropped because numeric
$_POST['t3'] = 'test1325'; // NOT dropped
$_POST['4t'] = 'test6347'; // NOT dropped
$_POST['_5'] = 'test3235'; // NOT dropped
$_POST['*4'] = 'test7432'; // NOT dropped BUT gets the NEXT POST value
$_POST["3"] = 'test8521'; // dropped because numeric
$_POST['"2"'] = 'test9472'; // NOT dropped because the string "2"
$_POST["'1'"] = 'test2741'; // NOT dropped because the string '1' BUT gets the NEXT POST value
$_POST["10"] = 'test1738'; // dropped because numeric
$_POST['test_field'] = 'test6123'; // NOT dropped

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST); // this drops numeric keys

echo '<pre>' . print_r($_POST, 1) . '</pre>';

curl_exec($ch);

curl_close($ch);

} else {
echo '<pre>' . print_r($_POST, 1) . '</pre>';

}

?>

这是输出:

Array
(
[1] => test1234
[234] => test3211
[t3] => test1325
[4t] => test6347
[_5] => test3235
[*4] => test7432
[3] => test8521
["2"] => test9472
['1'] => test2741
[10] => test1738
[test_field] => test6123
)
Array
(
[t3] => test1325
[4t] => test6347
[_5] => test3235
[*4] => test8521
["2"] => test9472
['1'] => test1738
[test_field] => test6123
)

更奇怪的是,不仅一些索引被删除了,而且被删除的索引旁边的值似乎发生了偏移。

最佳答案

假设您发送的内容类型 application/x-www-form-urlencoded 意味着您正在发送 HTML 表单数据。 (PHP curl 默认为此内容类型,因为它是 w3c 推荐的默认值 https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4)。

根据规范,NAME 标记(又名 postget 参数名称)必须以字母开头:https://www.w3.org/TR/html4/types.html#h-6.2

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").

这可能就是它没有按预期处理的原因,因为不支持在 POST 正文中使用指定内容类型的数字开始参数。

关于php - 为什么 PHP cURL 会丢弃数字键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35276537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com