Jaki jest najlepszy sposób przekazania tablicy jako parametru adresu URL? Zastanawiałem się, czy to możliwe:
$aValues = array();
$url = 'http://www.example.com?aParam='.$aValues;
lub co powiesz na to:
$url = 'http://www.example.com?aParam[]='.$aValues;
Czytałem przykłady, ale uważam, że to niechlujne:
$url = 'http://www.example.com?aParam[]=value1&aParam[]=value2&aParam[]=value3';
$_POST
?query = array('aParam'=> json_encode($arrayOfValues))
. I że możesz przekazać ładniejszy adres URL za pomocąurl_encode(implode('/',$query))
. Adres URL będzie wyglądał jakwww.example.com/aParam/[va1,val2,...]
. Przy odbiorze musisz wpisać wartość json_decode aParam do tablicy.Odpowiedzi:
Jest bardzo proste rozwiązanie:
http_build_query()
. Pobiera parametry zapytania jako tablicę asocjacyjną:wróci
http_build_query()
obsługuje wszystkie niezbędne znaki ucieczki (%5B
=>[
i%5D
=>]
), więc ten ciąg jest równyaParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d
.źródło
http_build_query
powrotemparam[]
i czasamiparam[index]
. Sprawdź ten post: stackoverflow.com/questions/11996573/…Edycja: Nie przegap powyższego rozwiązania Stefana, które wykorzystuje bardzo przydatną
http_build_query()
funkcję: https://stackoverflow.com/a/1764199/179125Knittl ma rację co do ucieczki. Można to jednak zrobić w prostszy sposób:
Jeśli chcesz to zrobić z tablicą asocjacyjną, spróbuj zamiast tego:
PHP 5.3+ (funkcja lambda)
PHP <5.3 (wywołanie zwrotne)
źródło
Najłatwiej byłoby użyć
serialize
funkcji.Serializuje dowolną zmienną do przechowywania lub przesyłania. Możesz o tym poczytać w podręczniku php - serializuj
Zmienną można przywrócić za pomocą
unserialize
Tak więc przy przejściu do adresu URL, którego używasz:
$url = urlencode(serialize($array))
i przywrócić używaną zmienną
$var = unserialize(urldecode($_GET['array']))
Uważaj jednak tutaj. Maksymalny rozmiar żądania GET jest ograniczony do 4k, który można łatwo przekroczyć, przekazując tablice w adresie URL.
Poza tym naprawdę nie jest to najbezpieczniejszy sposób przesyłania danych! Zamiast tego prawdopodobnie powinieneś rozważyć użycie sesji.
źródło
prosimy o unikanie zmiennych podczas wyprowadzania (
urlencode
).i nie możesz po prostu wydrukować tablicy, musisz w jakiś sposób zbudować swój adres URL za pomocą pętli
źródło
print $str . "\n";
dajea:4:{s:1:"a";s:8:"Thusitha";s:1:"b";s:10:"Sumanadasa";s:1:"c";s:6:"Lakmal";s:1:"d";s:11:"Nanayakkara";}
iprint $strenc . "\n";
dajeJeśli więc chcesz przekazać to
$array
przez adres URL dopage_no_2.php
,dawny:-
Aby powrócić do oryginalnej tablicy, to musi być
urldecode()
, a potemunserialize()
, jak to w page_no_2.php:daje
ponownie: D
źródło
Robię to z serializowanymi danymi zakodowanymi w base64. Chyba najlepszy i najmniejszy sposób. urlencode marnuje dużo miejsca, a masz tylko 4k.
źródło
To nie jest bezpośrednia odpowiedź, ponieważ już na to odpowiedziano, ale wszyscy mówili o wysyłaniu danych, ale nikt tak naprawdę nie powiedział, co robisz, kiedy się tam dostanie, a wypracowanie tego zajęło mi dobre pół godziny. Więc pomyślałem, że pomogę tutaj.
Powtórzę to trochę
Oczywiście sformatowałbyś go lepiej niż ten www.someurl.com?x=$query
I odzyskać dane
źródło
źródło
na otrzymanej stronie możesz użyć:
parse_str ($ str, $ tablica); var_dump ($ tablica);
źródło
To kolejny sposób rozwiązania tego problemu.
źródło