EncodeURIComponent verschlüsselt nicht -_.!~*'()
Problem bei der Übermittlung von Daten an php in Form eines xml-Strings.
Zum Beispiel:
<xml><text x="100" y="150" value="It's a value with single quote" /> </xml>
Allgemeine Flucht mit encodeURI
%3Cxml%3E%3Ctext%20x=%22100%22%20y=%22150%22%20value=%22It's%20a%20value%20with%20single%20quote%22%20/%3E%20%3C/xml%3E
Wie Sie sehen können, ist das einfache Anführungszeichen nicht verschlüsselt. Um das Problem zu lösen, habe ich zwei Funktionen erstellt, um das Problem in meinem Projekt zu lösen, um die URL zu kodieren:
function encodeData(s:String):String{
return encodeURIComponent(s).replace(/\-/g, "%2D").replace(/\_/g, "%5F").replace(/\./g, "%2E").replace(/\!/g, "%21").replace(/\~/g, "%7E").replace(/\*/g, "%2A").replace(/\'/g, "%27").replace(/\(/g, "%28").replace(/\)/g, "%29");
}
Zur Dekodierung der URL:
function decodeData(s:String):String{
try{
return decodeURIComponent(s.replace(/\%2D/g, "-").replace(/\%5F/g, "_").replace(/\%2E/g, ".").replace(/\%21/g, "!").replace(/\%7E/g, "~").replace(/\%2A/g, "*").replace(/\%27/g, "'").replace(/\%28/g, "(").replace(/\%29/g, ")"));
}catch (e:Error) {
}
return "";
}
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.