如何通過$ _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) –