Php 没有换行的POST失败,但换行有效吗?

Php 没有换行的POST失败,但换行有效吗?,php,json,post,Php,Json,Post,我正在调试一个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]

我正在调试一个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)

我注意到我的应用程序无法正确解析帖子。代码如下所示:

function Foo() {
    $state = somehow_get_state();
    $bar = $_POST['pols'][$state];
    // cool logic and stuff
array( // root-level array
    array(
        '1' => 'somestring',
        '2' => '...',
        '3' => '...',
        '4' => '...'
    ),
    array( // same as previous),
    // more arrays, potentially up to 50 total
)
我立即放了一个
die(var_dump($_POST))
Foo()
中,并注意到只有一部分数据实际被发布

当我在命令行上测试时,我注意到以下两个方面的差异:

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
这个(注意换行符)

前者只发布大约3.1KB的数据,而后者发布整个数据

有什么原因吗?我发布的是有效的JSON,看在我的份上,我不明白为什么一个有效,另一个无效

为了创建JSON,我创建了一个嵌套数组,如下所示:

function Foo() {
    $state = somehow_get_state();
    $bar = $_POST['pols'][$state];
    // cool logic and stuff
array( // root-level array
    array(
        '1' => 'somestring',
        '2' => '...',
        '3' => '...',
        '4' => '...'
    ),
    array( // same as previous),
    // more arrays, potentially up to 50 total
)
然后调用
json\u encode($my\u array,json\u HEX\u APOS)
创建JSON

我希望这只是一个橡皮鸭的时刻。:-)


编辑:我正在离开我的电脑,但是TCP捕获显示了同样的情况。我回来时还会添加我的Apache/php信息

如果您使用的是suhosin扩展,并且在/var/log/user.log中的失败试验后看到这样的行:

suhosin[...]: ALERT - configured POST variable limit exceeded - dropped variable 'x' (attacker 'x.y.z.207', file 'some_script.php')
那么很可能是这个扩展扰乱了你的请求。在这种情况下,您需要禁用或更新suhosin的配置,例如在/etc/php5/conf.d/suhosin.ini中

更新或添加这些行:

suhosin.post.max_vars = 3000
suhosin.request.max_vars = 3000

此配置最多允许3000个变量进入一个请求。

我对json不是很熟悉,因此这可能没有帮助,但我想到两件事:1:字符串中有一个编码错误的字符,这会破坏它,或者2字符串中的空格会导致它失败吗
[last_name]=Abraham&pols
注意Abraham后面的空格…在将数组编码为JSON之前,您可以在数组上尝试
utf8_encode()
。了解数据的哪些部分正在解析,哪些部分与查询字符串无关会很有帮助。@EternalHour前3.1KB。