我有一个表单,然后将其输出到POST:
<?php print file_get_contents('php://input'); ?>
%2Ffaults%2Ffault%5B1%5D%2F%40signal = gnc.gnc_in.ttag_sec&安培;%2Ffaults%2Ffault%5B1%5D =增量&安培;%2Ffaults%2Ffault%5B1%5D%2Fboolean%2F%40value =假安培; %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 =
一旦urldecoded:
/faults/fault[1]/@signal=gnc.gnc_in.ttag_sec
/faults/fault[1]=increment
/faults/fault[1]/boolean/@value=false
/faults/fault[1]/increment/@value=6677
/faults/fault[1]/threshold/@condition=
/faults/fault[1]/threshold/@value=
/faults/fault[1]/timestamp/@value=
然而,当我查看$ _POST时,我得到的是:
<?php print_r($_POST); ?>
Array ( [/faults/fault] => Array ( [1] => ) )
如您所见,该阵列中缺少一点点。有什么想法吗?
感谢。
答案 0 :(得分:1)
您必须将表单重组为:
<input name="xpath_expre[]" type="text" value="/faults/fault[1]/@signal" />
<input name="xpath_resul[]" type="text" value="gnc.gnc_in.ttag_sec" />
或者您必须自己解析数据。
This is the code在fins [
尝试构建数组时失败了。如您所见,您当前的方法还有其他失败点(这些是代码中的注释):
- 忽略变量名称中的前导空格
- 确保变量名称中没有空格或点
- PHP变量的名称中不能包含'[',因此我们将字符替换为'_'
- ...
答案 1 :(得分:0)
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>
答案 2 :(得分:0)
有时PHP需要我们:)
<?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 );