Wie kodiert man eine URL sicher mit JavaScript, so dass sie in eine GET-Zeichenfolge eingefügt werden kann?
var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;
Ich nehme an, dass Sie die Variable myUrl
in der zweiten Zeile kodieren müssen?
Sehen Sie sich die integrierten Funktionen encodeURIComponent(str) und encodeURI(str) an.
In Ihrem Fall sollte dies funktionieren:
var myOtherUrl =
"http://example.com/index.html?url=" + encodeURIComponent(myUrl);
Sie haben drei Möglichkeiten:
escape()
wird nicht kodieren: @*/+
encodeURI()
verschlüsselt nicht: ~!@#$&*()=:/,;?+'
encodeURIComponent()
verschlüsselt nicht: ~!*()'
Aber in Ihrem Fall, wenn Sie eine URL in einen GET
-Parameter einer anderen Seite übergeben wollen, sollten Sie escape
oder encodeURIComponent
verwenden, aber nicht encodeURI
.
Siehe Stack Overflow Frage Best practice: escape, or encodeURI / encodeURIComponent für weitere Informationen.
Bleiben Sie bei encodeURIComponent()
. Die Funktion encodeURI()
macht sich nicht die Mühe, viele Zeichen zu kodieren, die in URLs semantische Bedeutung haben (z.B. "#", "?" und "&"). escape()
ist veraltet und macht sich nicht die Mühe, "+"-Zeichen zu kodieren, die auf dem Server als kodierte Leerzeichen interpretiert werden (und kodiert, wie von anderen hier bemerkt, nicht-ASCII-Zeichen in URLs nicht richtig).
Es gibt eine schöne Erklärung des Unterschieds zwischen encodeURI()
und encodeURIComponent()
an anderer Stelle. Wenn Sie etwas so kodieren wollen, dass es sicher als Komponente eines URIs (z.B. als Abfrage-String-Parameter) eingebunden werden kann, sollten Sie encodeURIComponent()
verwenden.