Les fonctions encodeURI et encodeURIComponet sont toutes deux utilisées en JavaScript pour encoder les URI et convertir les paramètres pertinents en données au format d'encodage UTF-8. Lorsque l'URI effectue un saut d'emplacement, les codes non-ASCII tels que le chinois et le japonais dans les paramètres seront convertis en code.
Les fonctions de ces deux fonctions sont relativement similaires, mais il existe quelques différences.
encodeURI : Il y a 82 caractères qui ne seront pas encodés : !, #, $, &, ', (,), *, ,,,-,.,/,:,;,=,?,@, _,~,0-9,a-z,A-Z
encodeURIComponent : Il y a 71 caractères qui ne seront pas encodés : !, ', (,), *, -, ., _, ~, 0-9, a-z, A-Z
Question :
ajax.get ( url '?k1'=v1 '&k2'=v2 '&k3'=v3, ... );
Étant donné que l'URL est uniquement codée encodeURI, lorsque le paramètre que vous souhaitez soumettre est searchWord = a b, il devient un b.
Solution :
ajax.post(url, paramètres,....)
où params est l'objet.
Raison : Si le paramètre est un objet ou un tableau, la bibliothèque de composants a déjà encodeURIComponent pour vous. Et si vous utilisez simplement des chaînes, la bibliothèque de composants ne fait rien, donc les caractères spéciaux sont filtrés lorsqu'ils atteignent le backend.
Utilisation de encodeURI()
Cette méthode n'encode pas les lettres et les chiffres ASCII, ni ces caractères de ponctuation ASCII : - _ .
Le but de cette méthode est d'encoder complètement l'URI, donc la fonction encodeURI() n'échappera pas aux signes de ponctuation ASCII suivants qui ont des significations particulières dans l'URI : ;/?:@&= $, #
Astuce : Si le composant URI contient des délimiteurs, tels que ? et #, vous devez utiliser la méthode encodeURIComponent() pour encoder chaque composant séparément.
Exemple :
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/
// ,/?:@&=+$#
La fonction decodeURI() peut décoder l'URI codé par la fonction encodeURI().
Utilisation d'encodeURIComponent()
Cette méthode n'encode pas les lettres et les chiffres ASCII, ni ces caractères de ponctuation ASCII : - _ .
Les autres caractères (tels que :;/?:@&= $,# qui sont des signes de ponctuation utilisés pour séparer les composants URI) sont remplacés par une ou plusieurs séquences d'échappement hexadécimales.
Astuce : Veuillez noter que la fonction encodeURIComponent() est différente de la fonction encodeURI() dans le sens où la première suppose que ses paramètres font partie de l'URI (tels que le protocole, le nom d'hôte, le chemin ou la chaîne de requête). La fonction encodeURIComponent() échappe donc aux caractères de ponctuation utilisés pour séparer les parties de l'URI.
Exemple :
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
La fonction decodeURIComponent() peut décoder l'URI encodé par la fonction encodeURIComponent().