0

我有一个看起来像“1, 2”的列表,依此类推。当我使用 $_GET 发送此列表时,浏览器会在地址栏中显示:?myList=1,%25202.

问题是这就是我在 PHP 中得到的。我想根据“ ,”展开列表(注意逗号后面的空格),但我不能这样做,因为它会以另一种方式格式化。无论如何,我怎样才能爆炸列表?我需要得到一个包含列表中所有元素的数组,并且元素用逗号分隔,后跟空格。

explode(", ", $list);只是行不通。

谢谢!

编辑:这是在 GET 请求中传递的,如下所示:

$args = "list=" . $_POST["assigned"];
$extra = 'test.php?' . $args;
header("Location: http://$host$uri/$extra");
exit;

$s = "1,%25202";
$p = explode(", ", urldecode($s));
var_dump($p);

结果:

array(1) { [0]=> string(6) "1,%202" }

$s = "1,%25202";
$p = explode(", ", base64_decode($s));
var_dump($p);

结果:

array(1) { [0]=> string(4) "�nv�" }
4

2 回答 2

1

也许尝试:

   $numbers = urldecode($_GET['key']);

然后爆炸$numbers.

如果浏览器自动将它们编码为安全字符,那么您需要对它们进行解码。

于 2013-06-06T22:24:26.447 回答
0

POST在脚本的开头,变量中一直在发生一些事情。这是一个快速的概念验证,它验证如果您的变量确实是1, 2,它将正确解码:

if(empty($_GET['myList'])) {
    $simulated_POST = '1, 2';

    $extra = http_build_query(array(
        'myList' => $simulated_POST
    ));

    header('Location: http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] . '?' . $extra);

} else {
    $myList = explode(', ', $_GET['myList']);
    var_dump($myList);

}

你能验证POST变量确实是1, 2在发送时吗?

于 2013-06-06T22:24:33.293 回答