首页 文章

从$ _GET获取特殊字符

提问于
浏览
0

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

问题是's what I get in PHP. I'd喜欢基于“ , ”爆炸列表(注意逗号后面的空格)但我不能这样做,因为它以另一种方式格式化 . 我怎么能爆炸列表呢?我需要以包含列表中所有元素的数组结束,并且元素由逗号后跟空格分隔 .

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

    也许试试:

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

    然后爆炸 $numbers.

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

  • 1

    在脚本的开头, 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 吗?

相关问题