2013-03-05 9 views
5

Na mojej stronie internetowej po przesłaniu formularza z spacją wprowadzoną w polu tekstowym, jest on odczytywany jako% 20 w backendowym kodzie java zamiast spacji. Mogę zastąpić% 20 z powrotem do "" w backend, ale myślę, że to nie jest właściwe podejście i może się zdarzyć w dowolnym miejscu aplikacji.Parametr adresu URL języka Java zastępuje% 20 spacją

Czy istnieje lepszy sposób postępowania z nim po przejściu formularza?

+1

Nic złego w uzyskiwaniu '% 20'. Możesz: 'URL = URL.replaceAll ("% 20 "," ");' – Maroun

+1

url = url.value.replace ("% 20", ""); –

+1

Nie ma lepszego sposobu. Jest to standardowe kodowanie WWW HTTP - powinieneś chcieć, aby był w tym formacie. Jest poprawna. Proszę zobaczyć ten dokument do kodowania z W3C w celu uzyskania szczegółowych informacji. http://www.w3schools.com/tags/ref_urlencode.asp – ninnemannk

Odpowiedz

16

to nic złego. W ten sposób w adresie URL są zbierane znaki. Należy użyć URLDecoder, co jest szczególnie wskazane, ponieważ mimo swojej nazwy, to robi application/x-www-form-urlencoded dekodowanie:

String decoded = URLDecoder.decode(queryString, "UTF-8"); 

Wtedy będziesz w stanie zbudować mapę par klucz/wartość parsowania zapytaniu URL , dzieląc na & i używając =, aby oddzielić klucz od wartości (może to być również null).

Należy jednak pamiętać, że jeśli URL jest przekazywany jako obiekt URI, ma on ładne getQuery(), które już zwraca tekst bez zmiany znaczenia.

Jeśli używasz API serwletu, nie musisz uciekać od niczego, ponieważ istnieją dobre metody, takie jak getParameterMap().

+0

Prawdopodobnie framework, którego używasz po stronie serwera, udostępnia wszystko na niektórych * mapach * params. Kod UTF-8 w moim przykładzie służy, ponieważ dekoder musi znać zestaw znaków "% 20". "* Obecne żądanie URL jest już UTF-8 *" Nie wiem, co to dokładnie oznacza ... – Raffaele

+0

Wiersz żądania (który zawiera część za hostem) może zawierać tylko podzbiór znaków ASCII. Dodatkowo, niektóre postacie są specjalne i muszą zostać usunięte. Ponadto, każda postać spoza białej listy musi zostać zmieniona za pomocą '% XX' - Zobacz [RFC 2396] (http://www.ietf.org/rfc/rfc2396.txt) – Raffaele

+0

Nic nie ma jako * Zestaw znaków UTF-8 *. Jest zestaw Unicode, a UTF-8 to schemat kodowania. Interfejs API języka Java użyty w mojej odpowiedzi wymaga, aby schemat budował znaki z oktetów. – Raffaele

4
try { 
     String result = URLDecoder.decode(urlString, "UTF-8"); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
Powiązane problemy