从$ _GET获取特殊字符

时间:2013-06-06 22:21:06

标签: php get

我有一个看起来像“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�" }

2 个答案:

答案 0 :(得分:1)

也许试试:

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

然后爆炸$numbers.

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

答案 1 :(得分: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吗?