1

请考虑以下简单的测试套件:

<?php
$data = file_get_contents('php://input');
echo '<pre>';
echo 'raw: <br/>';
print_r($data);
echo '<br/>$_POST: <br/>';
print_r($_POST);
echo '
<form name="form1" method="post" type="application/x-www-form-urlencoded"   action="postTest.php"/>
<input type="text" name="my1[]" value="1" />
<input type="text" name="my1[]" value="2" />
<input type="text" name="my3" value="3 "/>

<input type="submit" />
</form>

这会在大多数运行 PHP5+ 的服务器上返回

raw: 
my1%5B%5D=1&my1%5B%5D=2&my3=3+
$_POST: 
Array
(
    [my1] => Array
        (
            [0] => 1
            [1] => 2
        )

    [my3] => 3 
) 

正如预期的那样。但是在我的本地系统上使用 Ubuntu 12.10、Apache 2.2.22、PHP 5.4.6、语言环境 tr_TR.UTF-8,它会返回

raw: 
my1%5B%5D=1&my1%5B%5D=2&my3=3+
$_POST: 
Array
(
    [my3] => 3 
)

my1 数组消失的地方。请注意 $_POST['my3'] 仍然存在,我没有遇到非数组 $_POST 数据的任何其他问题,我仍然可以从原始数据中看到 m1 存在。这真是奇怪的行为。什么通常会导致这个问题?

4

2 回答 2

0

您可以尝试以下方法吗?

$post = file_get_contents("php://input");
parse_str($post , $output);
print_r($output);

查看值是否传递给 PHP

于 2013-05-28T23:41:11.667 回答
0

一个疯狂的猜测...

[ 和 ] 在 javascript 标识符中无效,它们在 xhtml 名称属性中也无效。

所以有两个想法:

一台服务器提供 xhtml,另一台提供 html。

您正在使用不同的浏览器,其中一种浏览器对名称属性比另一种更挑剔。

我认为您可以将字段名称转换为 my1_0 和 my1_1 或类似名称。

于 2013-05-28T23:44:24.653 回答