首页 / PHP / 为什么PHP cURL会删除数字键?
为什么PHP cURL会删除数字键?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么PHP cURL会删除数字键?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2283字,纯文字阅读大概需要4分钟。
内容图文
![为什么PHP cURL会删除数字键?](/upload/InfoBanner/zyjiaocheng/664/66f98c7e9d03406bb94af6cb5f083900.jpg)
我正在尝试使用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令牌(也称为帖子并获取参数名称)必须以字母开头: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 cURL会删除数字键?全部内容,希望文章能够帮你解决为什么PHP cURL会删除数字键?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。