Die akzeptierte Antwort ist gut. Um auf den letzten Teil einzugehen:
Beachten Sie, dass encodeURIComponent das Zeichen ' nicht entschlüsselt. Ein häufiger Fehler ist die Verwendung zur Erstellung von HTML-Attributen wie href='MyUrl', die einen Injektionsfehler haben könnte. Wenn Sie html aus Strings konstruieren, verwenden Sie entweder " anstelle von ' für Attributanführungszeichen, oder fügen Sie eine zusätzliche Kodierungsschicht (' kann als %27 kodiert werden).
Wenn Sie auf Nummer sicher gehen wollen, prozentuale Kodierung nicht reservierter Zeichen sollte ebenfalls kodiert werden.
Sie können diese Methode verwenden, um ihnen zu entkommen (Quelle Mozilla )
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
// fixedEncodeURIComponent("'") --> "%27"
135 Stimmen
Es ist erwähnenswert, dass
encodeURIComponent("var1=value1&var2=value2")
es no der typische Anwendungsfall. Dieses Beispiel kodiert die=
et&
was wahrscheinlich nicht beabsichtigt war!encodeURIComponent
wird in der Regel nur auf den Wert in jedem Schlüssel-Wert-Paar angewendet (der Teil nach jedem=
).3 Stimmen
Müssen Sie irgendetwas an dem Schlüssel machen? Was ist, wenn er ein = enthält? (Ist das überhaupt möglich?)
3 Stimmen
@Mala Ich bin noch neu in der Web-Programmierung im Allgemeinen, aber was ich in meiner begrenzten Erfahrung verwendet habe, ist, den Schlüssel und den Wert getrennt zu kodieren, um sicherzustellen, dass das "=" bleibt:
var params = encodeURIComponent(key) + '=' + encodeURIComponent(value);
- Vielleicht weiß jemand anders einen besseren Weg.1 Stimmen
@nedshares Ich habe damit gespielt, aber soweit ich das beurteilen kann, scheint der Schlüssel nicht verschlüsselt zu sein... zumindest nicht auf die gleiche Art und Weise. Vielleicht ist es gegen die Spezifikation, ein = im Schlüssel zu haben?
3 Stimmen
Es ist auch erwähnenswert, dass neuere JavaScript-Implementierungen die Schnittstellen auf höherer Ebene bereitstellen URL et URLSearchParams zur Manipulation von URLs und deren Abfragezeichenfolgen.
0 Stimmen
EncodeURI ist für die Kodierung eines bereits erstellten Multi-Parameter-Strings (behandelt Leerzeichen, die in einer URL ungültig sind). encodeURIComponent kodiert einen einzelnen Parameterwert. Diese machen mehr. Aber das ist der erste Gedanke, den ich mir immer stelle.