Php POST未正确解析为$\u POST

Php POST未正确解析为$\u POST,php,post,Php,Post,我有一个表单,它将此输出到POST中: <?php print file_get_contents('php://input'); ?> 然而,当我在$u POST中查看时,我得到的是: <?php print_r($_POST); ?> Array ( [/faults/fault] => Array ( [1] => ) ) 数组([/faults/fault]=>数组([1]=>) 正如您所看到的,该数组中缺少了相当一部分。你知道为什么吗

我有一个表单,它将此输出到POST中:

<?php print file_get_contents('php://input'); ?>
然而,当我在$u POST中查看时,我得到的是:

   <?php print_r($_POST); ?>
Array ( [/faults/fault] => Array ( [1] => ) )

数组([/faults/fault]=>数组([1]=>)
正如您所看到的,该数组中缺少了相当一部分。你知道为什么吗


谢谢。

PHP被变量名中的
[1]
阻塞了,它似乎将其解释为数组元素

我认为这些在HTML中都不是有效的字段名

根据您想要执行的操作,我将去掉
[1]
,或者将其放在每个变量名的末尾,这将导致许多数组,其第一个元素包含所需的值

像这样的

faults/fault[1]/@signal=gnc.gnc_in.ttag_sec<br>
/faults/fault[1]=increment&/faults/fault[1]/boolean/@value=false<br>
/faults/fault/increment/@value[1]=6677<br>
/faults/fault/threshold/@condition[1]=<br>
/faults/fault/threshold/@value[1]=<br>
/faults/fault/timestamp/@value[1]/=<br>
faults/fault[1]/@signal=gnc.gnc_in.ttag_sec
/故障/故障[1]=增量和/故障/故障[1]/boolean/@value=false
/故障/故障/增量/@value[1]=6677
/故障/故障/阈值/@条件[1]=
/故障/故障/阈值/@值[1]=
/故障/故障/时间戳/@value[1]/=

您必须将表单重新构造为:

<input name="xpath_expre[]" type="text" value="/faults/fault[1]/@signal" />
<input name="xpath_resul[]" type="text" value="gnc.gnc_in.ttag_sec" />

或者你必须自己解析数据

当数组运行时,尝试构建数组的方法失败了。正如您所看到的,当前方法还有其他失败点(这些是代码中的注释):

  • 忽略变量名称中的前导空格
  • 确保变量名中没有空格或点
  • PHP变量的名称中不能包含“[”,因此我们将字符替换为“\ux”

有时PHP需要我们的帮助:)



这是因为发布的不是表单数据。而是表单数据。我将其输入表单并点击提交。为什么不是表单数据?它们是有效的字段名(不是ID,但名称可以),并使用
[foo]处理表单控件
在名称中是正常的PHP表单解析行为。它不仅正常,而且对例如
非常有用(我不是说关闭它是没有用的…)一个精明的观察者可能会注意到这些名称实际上是XPath;)它在另一个有[一些#]的页面上工作在名称中。我不知道它为什么会在这个页面上阻塞。有什么原因PHP在将它解析为$u POST时会阻塞这个输入吗?谢谢!我自己解析它应该不会太难,我只需要使用&and=。
<input name="xpath_expre[]" type="text" value="/faults/fault[1]/@signal" />
<input name="xpath_resul[]" type="text" value="gnc.gnc_in.ttag_sec" />

<?php
#$input = file_get_contents('php://input');
$input = urldecode( '%2Ffaults%2Ffault%5B1%5D%2F%40signal=gnc.gnc_in.ttag_sec&%2Ffaults%2Ffault%5B1%5D=increment&%2Ffaults%2Ffault%5B1%5D%2Fboolean%2F%40value=false&%2Ffaults%2Ffault%5B1%5D%2Fincrement%2F%40value=6677&%2Ffaults%2Ffault%5B1%5D%2Fthreshold%2F%40condition=&%2Ffaults%2Ffault%5B1%5D%2Fthreshold%2F%40value=&%2Ffaults%2Ffault%5B1%5D%2Ftimestamp%2F%40value=' );

$_POST = array();

foreach( explode( '&', $input ) as $entry ) {
    list( $key, $value )  = explode( '=', $entry );

    $_POST[ $key ] = $value;
}

echo $input, PHP_EOL;
print_r( $_POST );