POST是没有得到正确地解析为$ _ POST
我有一个表格,并输出到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 = 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 =
一旦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] =>))
正如你所看到的,一个公平位是从阵列丢失。任何想法为什么?
谢谢。
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>
你必须要么重组形式是这样的:
<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这是失败的如何通过尝试建立一个数组,当它finse [
。正如你所看到的,还有你目前的做法失败的其他点(这些代码是注释):
- 忽略的变量名
- 前导空格确保我们没有空间或在变量名
- PHP变量不能包含点“[”在他们的名字,所以我们用“_”替换字符
- ...
谢谢!自己解析它不应该太难,我只需用&和=来爆炸。 – Peter 2010-07-30 20:33:34
有时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);
这是因为这不是表单数据被张贴。 – Fosco 2010-07-30 19:43:49
它是表单数据。我将它输入表单并点击提交。为什么它不是表格数据? – Peter 2010-07-30 20:01:04