Ich habe eine Zeichenfolge wie http://google.com/search/q=<%= name %>
.Java URI escaper, die wie die Javascript Unescape funktioniert
eine dritte Partei js Bibliothek, die ich keine Kontrolle darüber haben, entweicht diese zu "http://google.com/search/q=%3C%=%20name%20%%3E"
die Javascript erfolgreich unescape auf die ursprüngliche Zeichenfolge mit
unescape("http://google.com/search/q=%3C%=%20name%20%%3E")
Aber Java URLDecode.decode("http://google.com/search/q=%3C%=%20name%20%%3E")
ein IllegalArgumentException
wegen der Würfe unescaped literal %
Zeichen in der Zeichenfolge, die natürlich korrekt und nach Spezifikation ist, aber das macht serverseitige Verarbeitung kompliziert.
Bevor ich versuche, die fehlerhafte JS-Escape auf der Serverseite mit regulären Ausdrücken zu beheben (weil, wie erwähnt, kann ich die JS-Seite nicht ändern), würde ich gerne wissen, ob es eine permissivere Java-URL/URI gibt Dekodier-API, die genauso funktionieren würde wie Javascript's unescape
, dh die eigenständigen "%" - Zeichen ignorieren und nur decodieren würde, was dekodierbar ist.
Brilliant! Ich danke dir sehr! Nachdem Sie ECMAScript erwähnt haben, wurde mir klar, dass in der Tat Java's native ScriptingEngine verwendet werden kann, um das JS-Stil-Escaping auszuführen, zB 'new ScriptEngineManager(). GetEngineByName (" nashorn "). Eval (" unescape (% 3C% =% 20name % 20 %% 3E \ ")"), aber das bringt den unnötigen Aufwand für die Instanziierung der Skript-Engine mit sich, daher markiere ich dies als akzeptierte Antwort. – ccpizza
Schön. Ich hätte an die Skript-Engine denken sollen. Es ist eine robustere Lösung, aber ja, ein bisschen schwerer. –