2010-02-04 20 views
7

Używam jsps i w moim adresie URL mam wartość dla zmiennej, np. "L & T". Teraz, gdy próbuję odzyskać wartość za pomocą request.getParameter, otrzymuję tylko "L". Rozpoznaje on "&" jako separator i dlatego nie jest traktowany jako cały ciąg.Ucieczka i adres URL

Jak rozwiązać ten problem?

+0

podać kod - w jaki sposób wstawiasz "L & T" na pasku adresu? – Bozho

Odpowiedz

14
java.net.URLEncoder.encode("L & T", "utf8") 

ten wyprowadza URL zakodowane, co jest w porządku jako parametr GET:

L+%26+T 
+0

ten z drugim argumentem dla kodowania znaków? – Bozho

+0

OK, mój komentarz jest niewłaściwie umieszczony, usunę go – Rodrigo

1

Dosłowne ampersand w adresie URL powinien być zakodowany jako: %26

// Your URL 
http://www.example.com?a=l&t 

// Encoded 
http://www.example.com?a=l%26t 
1

Trzeba aby "zakodować URL" parametry, aby uniknąć tego problemu. Format ciągu zapytania adresu URL to: ...?<name>=<value>&<name>=<value>&<etc> Wszystkie s <name> s oraz <value> muszą być zakodowane za pomocą adresu URL, co w zasadzie oznacza przekształcenie wszystkich znaków, które mogą być błędnie interpretowane (np. &) na wartości z oceną procentową. Zobacz tę stronę, aby uzyskać więcej informacji: http://www.w3schools.com/TAGS/ref_urlencode.asp

Jeśli generowania URL Problem z Java, należy użyć tej metody: String str = URLEncoder.encode(input, "UTF-8");

generowania URL gdzie indziej (niektóre szablony lub JS lub surowy markup) , musisz naprawić problem u źródła.

0

Możesz użyć UriUtils#encode(String source, String encoding) z Spring Web. Ta klasa narzędziowa zapewnia również sposoby kodowania tylko niektórych części adresu URL, takich jak UriUtils#encodePath.