2014-09-22 22 views
5

Wystarczy powiedzieć, mam następujący adres URL, który ma parametr ciągu kwerendy, która jest url:Czy powinienem zakodować kod zapytania, który jest adresem URL?

http://www.someSite.com?next=http://www.anotherSite.com?test=1&test=2

Mam url zakodować parametru next? Jeśli tak, kto jest odpowiedzialny za odkodowanie - przeglądarkę internetową lub moją aplikację internetową?

Pytam się widzę wiele dużych witryn, które robią rzeczy jak na poniższym

http://www.someSite.com?next=http://www.anotherSite.com/another/url

W powyższym przykładzie, nie przeszkadzają kodującego parametr next bo zgaduję, wiedzą, że nie ma żadnych parametrów łańcucha zapytania. Czy można to zrobić, jeśli mój adres URL next nie zawiera również żadnych parametrów ciągu zapytania?

Odpowiedz

6

RFC 2396 sec. 2.2 mówi, że powinieneś kodować te symbole wszędzie tam, gdzie nie są używane z powodu ich wyraźnych znaczeń; tj. zawsze powinieneś tworzyć targetUrl + '?next=' + urlencode(nextURL).

Przeglądarka internetowa nie "dekoduje" tych parametrów; przeglądarka nie wie nic o parametrach, ale po prostu przekazuje ciąg. Ciąg zapytania formularza http://www.example.com/path/to/query?param1=value&param2=value2 jest get-wymagane przez przeglądarkę jako:

GET /path/to/query?param1=value&param2=value2 HTTP/1.1 
Host: www.example.com 
(other headers follow) 

na backend, trzeba przeanalizować wyniki. Myślę, że macierz PHP $_REQUEST zrobiła to już dla ciebie; w innych językach należy podzielić pierwszy znak ?, a następnie podzielić na znaki &, a następnie podzielić na pierwszy znak =, a następnie urdleć zarówno nazwę, jak i wartość.

Powiązane problemy