如何通过$ _GET将一个或多个数组变量传递给另一个页面?
我总是在形式?a=1&b=2&c=3
讲什么关于通过a=[1,2,3]
变量值?
我是否需要编写for循环并追加所有值?
感谢
如何通过$ _GET将一个或多个数组变量传递给另一个页面?
我总是在形式?a=1&b=2&c=3
讲什么关于通过a=[1,2,3]
变量值?
我是否需要编写for循环并追加所有值?
感谢
可以使用[]
语法通过_GET传递数组:
?a[]=1&a[]=2&a[]=3
PHP懂得这个语法,所以$_GET['a']
将等于array(1, 2, 3)
。
您也可以指定键:
?a[42]=1&a[foo]=2&a[bar]=3
多维数组工作太:
?a[42][b][c]=1&a[foo]=2
http_build_query()
自动执行此操作:
http_build_query(array('a' => array(1, 2, 3))) // "a[]=1&a[]=2&a[]=3"
http_build_query(array(
'a' => array(
'foo' => 'bar',
'bar' => array(1, 2, 3),
)
)); // "a[foo]=bar&a[bar][]=1&a[bar][]=2&a[bar][]=3"
另一种方法是通过JSON编码的数组:
?a=[1,2,3]
而且你可以解析a
与json_decode
:
$a = json_decode($_GET['a']); // array(1, 2, 3)
并与json_encode再次对其进行编码:
json_encode(array(1, 2, 3)); // "[1,2,3]"
不要用不完serialize()
为此目的。 Serialize允许序列化对象,并且有办法让它们执行代码。所以你不应该反序列化不可信的字符串。
json的+1。只要确保你urlencode你的json数组来计数xss – knittl
'urlencode()'不是反击xss的方法。 'htmlspecialchars()'是。但是任何人都应该已经'htmlspecialchars()'他输出的所有内容。 – arnaud576875
@arnoud:在属性中使用urlencode是安全的。当传递一个url时,你希望它为urls编码,而不是标记(想'href =“”') – knittl
您可以将关联数组传递给http_build_query()
,并将生成的字符串作为查询字符串追加到URL。该数组将自动由PHP解析,因此$_GET
在接收页面上将包含一个数组。
例
$query_str = http_build_query(array(
'a' => array(1, 2, 3)
));
仅仅是重复$_GET
变量是这样的:name=john&name=lea
这给你一个array
。
我曾经相信它会被覆盖!
这是不正确的。重复参数*会覆盖。您必须在每个“名称”部分包含括号以获取数组。至少,这是PHP 5.3+上发生的情况。 –
$city_names = array(
'delhi',
'mumbai',
'kolkata',
'chennai'
);
$city_query = http_build_query(array('city' => $city_names));
这会给你:
city[0]=delhi&city[1]=mumbai&city[2]=kolkata&city[3]=chennai
如果要编码的支架也然后使用下面的代码
:
$city_query = urlencode(http_build_query(array('city' => $city_names)));
输出:
city%255B0%255D%3Ddelhi%26city%255B1%255D%3Dmumbai .....
简短而有帮助。 +1 – Siraj
[传递数组作为url参数]的可能重复(http://stackoverflow.com/questions/1763508/passing-arrays-as-url-parameter) –