2013-03-05 20 views
5

In meiner Webseite, wenn Formular mit einem Leerzeichen im Textfeld eingereicht wird, wird es als Backend-Java-Code% 20 anstelle von Leerzeichen gelesen. Ich kann% 20 zurück zu "" im Backend ersetzen, aber ich denke, es ist nicht der richtige Ansatz und es könnte überall in der Anwendung passieren.Java-URL-Parameter ersetzen% 20 durch Leerzeichen

Gibt es eine bessere Möglichkeit, es in Front-End zu behandeln, wenn Sie Formular absenden?

+1

Nichts ist falsch mit "% 20" bekommen. Sie können: 'URL = URL.replaceAll ("% 20 "," ");' – Maroun

+1

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

+1

Es gibt keinen besseren Weg. Dies ist die Standard-HTTP-Webcodierung - Sie sollten es in diesem Format haben wollen. Das ist richtig. Details finden Sie in diesem Kodierungsdokument von W3C. http://www.w3schools.com/tags/ref_urlencode.asp – ninnemannk

Antwort

16

nicht nur sind das Sortieren, die mit, dass nichts falsch ist. So werden Zeichen in einer URL maskiert. Sie sollten URLDecoder verwenden, die besonders geeignet ist, denn trotz seines Namens, es tut application/x-www-form-urlencoded Decodierung:

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

Dann werden Sie in der Lage sein, eine Karte von Schlüssel/Wert-Paare bauen die Abfrage Teil der URL Parsing , auf & aufteilen und = verwenden, um den Schlüssel von dem Wert zu trennen (der auch null sein kann).

Beachten Sie jedoch, dass, wenn die URL als URI Objekt übergeben wird, es eine schöne getQuery() hat, die bereits den nicht-gescannten Text zurückgibt.

Wenn Sie die Servlet-API verwenden, müssen Sie nichts entkommen, da es schöne Methoden wie getParameterMap() gibt.

+0

Wahrscheinlich macht das Framework, das Sie auf der Serverseite verwenden, alles unter einer * params * map verfügbar. Der UTF-8 in meinem Beispiel dient, weil der Decoder wissen muss, auf den Zeichensatz "% 20" verweist. "* Die aktuelle URL-Anfrage ist bereits UTF-8 *" Ich weiß nicht, was es genau bedeutet ... – Raffaele

+0

Die Anforderungszeile (die den Teil nach dem Host enthält) kann nur eine Teilmenge von ASCII-Zeichen enthalten. Außerdem sind einige Zeichen speziell und müssen entkoppelt werden. Außerdem muss jedes Zeichen außerhalb der Whitelist mit '% XX' maskiert werden - siehe [RFC 2396] (http://www.ietf.org/rfc/rfc2396.txt) – Raffaele

+0

Es gibt nichts als * UTF-8 Zeichensatz *. Es gibt den Unicode-Satz und UTF-8 ist ein Kodierungsschema. Die in meiner Antwort verwendete Java-API erfordert das Erstellen von Zeichen aus Oktetten. – Raffaele

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