Die Funktionen encodeURI und encodeURIComponet werden beide in JavaScript verwendet, um URIs zu kodieren und relevante Parameter in Daten im UTF-8-Kodierungsformat umzuwandeln. Wenn der URI einen Standortsprung durchführt, werden Nicht-ASCII-Codes wie Chinesisch und Japanisch in den Parametern konvertiert.
Die Funktionen dieser beiden Funktionen sind relativ ähnlich, es gibt jedoch einige Unterschiede.
encodeURI: Es gibt 82 Zeichen, die nicht codiert werden: !, #, $, &, ', (,), *, ,,,-,.,/,:,;,=,?,@, _,~,0-9,a-z,A-Z
encodeURIComponent: Es gibt 71 Zeichen, die nicht codiert werden: !, ', (,), *, -, ., _, ~, 0-9, a-z, A-Z
Frage:
ajax.get ( url '?k1'=v1 '&k2'=v2 '&k3'=v3, ... );
Da die URL nur encodeURI-codiert ist, wird der Parameter, den Sie übermitteln möchten, searchWord = a b, zu einem b.
Lösung:
ajax.post( URL, Parameter,....)
wobei params das Objekt ist.
Grund: Wenn der Parameter ein Objekt oder Array ist, verfügt die Komponentenbibliothek bereits über encodeURIComponent. Und wenn Sie nur Zeichenfolgen verwenden, unternimmt die Komponentenbibliothek nichts, sodass die Sonderzeichen gefiltert werden, wenn sie das Backend erreichen.
Verwendung von encodeURI()
Diese Methode kodiert weder ASCII-Buchstaben und -Zahlen noch diese ASCII-Satzzeichen: - _ ~ * ' ( ).
Der Zweck dieser Methode besteht darin, den URI vollständig zu kodieren, sodass die Funktion encodeURI() die folgenden ASCII-Satzzeichen, die im URI eine besondere Bedeutung haben, nicht maskiert: ;/?:@&= $, #
Tipp: Wenn die URI-Komponente Trennzeichen wie ? und # enthält, sollten Sie die Methode encodeURIComponent() verwenden, um jede Komponente separat zu kodieren.
Beispiel:
document.write(encodeURI("http://www.w3school.com.cn")+ "<br />")
document.write(encodeURI("http://www.w3school.com.cn/My first/"))
document.write(encodeURI(",/?:@&=+$#"))
//批注:只转换域名后面的部分,并且对,/?:@&=+$#不处理。
// http://www.w3school.com.cn
// http://www.w3school.com.cn/My%20first/
// ,/?:@&=+$#
Die Funktion decodeURI() kann den von der Funktion encodeURI() codierten URI dekodieren.
encodeURIComponent()-Verwendung
Diese Methode kodiert weder ASCII-Buchstaben und -Zahlen noch diese ASCII-Satzzeichen: - _ ~ * ' ( ).
Andere Zeichen (z. B. :;/?:@&= $,#, bei denen es sich um Satzzeichen zur Trennung von URI-Komponenten handelt) werden durch eine oder mehrere hexadezimale Escape-Sequenzen ersetzt.
Tipp: Bitte beachten Sie, dass sich die Funktion encodeURIComponent() von der Funktion encodeURI() dadurch unterscheidet, dass erstere davon ausgeht, dass ihre Parameter Teil des URI sind (z. B. Protokoll, Hostname, Pfad oder Abfragezeichenfolge). Die Funktion encodeURIComponent() entgeht daher den Satzzeichen, die zum Trennen von Teilen des URI verwendet werden.
Beispiel:
document.write(encodeURIComponent("http://www.w3school.com.cn"))
document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/"))
document.write(encodeURIComponent(",/?:@&=+$#"))
//对比
// http%3A%2F%2Fwww.w3school.com.cn
// http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F
// %2C%2F%3F%3A%40%26%3D%2B%24%23
Die Funktion decodeURIComponent() kann den von der Funktion encodeURIComponent() codierten URI dekodieren.