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