【发布时间】:2015-07-24 02:04:47
【问题描述】:
我正在调试一个 PHP 应用程序,我必须将一些数据发布到我的服务器,然后解析它并返回一些值——超级简单的东西。
数据格式为:
action=display_all_pols&donate_form=1&user_state=&state=AK&pols[LA][0][post_id]=2714&pols[LA][0][first_name]=Ralph&pols[LA][0][last_name]=Abraham &pols[LA][0][profile_image]=2762
我的数据大小不一,例如187 字节,更大的,例如46KB。
我注意到我的应用程序未能正确解析 POST。代码是这样的:
function Foo() {
$state = somehow_get_state();
$bar = $_POST['pols'][$state];
// cool logic and stuff
我立即在Foo() 中添加了die(var_dump($_POST));,并注意到实际上只有一部分数据被发布了。
当我在命令行上对此进行测试时,我注意到以下两者之间的区别:
POST http://10.1.10.22/wesupportthat/wp-admin/admin-ajax.php
action=display_all_pols&donate_form=1&user_state=&state=AK&pols[LA][0][post_id]=2714&pols[LA][0][first_name]=Ralph&pols[LA][0][last_name]=Abraham &pols[LA][0][profile_image]=2762
还有这个(注意换行);
POST http://10.1.10.22/wesupportthat/wp-admin/admin-ajax.php
action=display_all_pols&donate_form=1&user_state=&state=AK&
pols[LA][0][post_id]=2714&
pols[LA][0][first_name]=Ralph&
pols[LA][0][last_name]=Abraham&
pols[LA][0][profile_image]=2762
前者只会 POST 大约 3.1KB 的数据,而后者会 POST 整个数据。
有什么原因吗?我发布了有效的 JSON,为了我的爱,我无法弄清楚为什么一个有效而另一个无效。
为了创建 JSON,我创建了一个嵌套数组,如下所示:
array( // root-level array
array(
'1' => 'somestring',
'2' => '...',
'3' => '...',
'4' => '...'
),
array( // same as previous),
// more arrays, potentially up to 50 total
)
然后调用 json_encode($my_array, JSON_HEX_APOS); 创建 JSON。
我希望这只是一个橡皮鸭时刻。 :-)
编辑:我正在离开我的计算机,但 TCP 捕获显示同样的事情。我回来时还会添加我的 Apache/php 信息。
【问题讨论】:
-
我对 json 不是很熟悉,所以这可能没有帮助,但我想到了两件事:1:字符串中有一个编码错误的字符,这会破坏它,或者2 字符串中的空格会导致它失败吗?
[last_name]=Abraham &pols注意亚伯拉罕后面的空格... -
您可以在将数组编码为 JSON 之前尝试
utf8_encode()。 -
了解正在解析的数据部分以及与查询字符串无关的部分将很有帮助。
-
@EternalHour 前 3.1KB。