我正在尝试通过cURL POST请求接收一个数组,而且我遇到了一个问题。
长话短说:这是我们所处的api控制器,当我json_encode响应时......
echo json_encode($_POST['keys']); return;
结果(在api通信的主叫端):
array(361) {
[0]=>
string(26) "some+urlencoded+string"
[1]=>
string(14) "and+some+other"
...
}
等等。所以api接收我的参数数组没有问题。
然后在api中我尝试使用foreach循环对每个字符串进行urldecode,将这些值放在其他数组中:
$myArray = array();
foreach ($_POST['keys'] as $key => $value)
{
$myArray[$key] = urldecode($value);
// Or $myArray[] = urldecode($value); -- same result
}
echo json_encode($myArray); return;
这就是结果:
NULL
我做错了什么?
提前致谢:)
=============================================== ===================================
编辑:问题似乎是,在api控制器(存在于yii应用程序中)urledecode不起作用。也不是utf8_decode,也不是base64_decode。无论如何,至少它们不能在foreach循环中工作。他们为什么不工作?甘拜下风。我还是被卡住了。=============================================== ===================================
编辑2:我在问题的隔离方面取得了一些进展,在SO问了另一个问题。对不起,不妨关闭。PHP (CI) cURL passed multidimensional array does not behave as one (Can't loop it)
答案 0 :(得分:1)
我认为你的问题不在这里......你确定你的$ _POST ['key']在你做到这一点时还可以吗?你应该尝试在你的循环中回应一些东西,或者在之前回复print_r($ _ POST ['keys'])。
我试过了:
$_POST['keys'] = Array('some+urlencoded+string','and+some+other') ;
$myArray = array();
foreach ($_POST['keys'] as $key => $value)
$myArray[$key] = urldecode($value);
echo '<pre>' ;
var_dump($_POST['keys']) ;
echo json_encode($_POST['keys']);
echo "\n" ;
echo json_encode($myArray);
echo '</pre>' ;
这是非常正确的:
array(2) {
[0]=>
string(22) "some+urlencoded+string"
[1]=>
string(14) "and+some+other"
}
["some+urlencoded+string","and+some+other"]
["some urlencoded string","and some other"]
在$ _POST ['keys']和$ myArray上创建print_r,我认为你的循环不起作用。