Ich habe versucht, java.net.URI zu verwenden, um Abfragezeichenfolgen zu manipulieren, aber ich scheiterte sogar bei sehr einfachen Aufgaben, wie das Abrufen der Abfragezeichenfolge von einer URL und das Platzieren in einer anderen.
Weißt du, wie dieser Code unten funktioniert?
%Vor% Aufruf an uri2.toASCIIString()
sollte zurückkehren: http://domain/a-path?param1=x%3D1
aber es gibt zurück: http://domain/a-path?param1=x%253D1
(Doppelcodierung)
Wenn ich getQuery () anstelle von getRawQuery () verwende, wird die Abfragezeichenfolge überhaupt nicht codiert und die URL sieht so aus: http://domain/a-path?param1=x=1
Das Problem besteht darin, dass der zweite Konstruktor die Abfrage und das Fragment mithilfe der URL-Codierung codiert. Aber =
ist ein legales URI-Zeichen, also wird es das nicht für Sie kodieren; und %
ist kein gültiges URI-Zeichen, also wird es codieren. Das ist genau das Gegenteil von dem, was Sie wollen, in diesem Fall.
Sie können also den zweiten Konstruktor nicht verwenden. Verwenden Sie die erste, indem Sie die Teile der Zeichenfolge selbst verketten.
Können Sie den Aufruf mit einem Aufruf von getQuery()
? in java.net.URLEncoder.encode(String)
umbrechen?
Tags und Links java standard-library