Sen kullanarak olmamalıdır encodeURIComponent()
ya encodeURI()
. MDN Belgelerine göre fixedEncodeURIComponent()
ve kullanmalısınız fixedEncodeURI()
.
İle ilgili olarak encodeURI()
...
Köşeli parantezleri ayrılmış kılan (IPv6 için) ve dolayısıyla bir URL'nin parçası olabilecek bir şey oluştururken (örneğin bir ana bilgisayar) kodlanmamış olan URL'ler için daha yeni RFC3986'yı izlemek isterseniz, aşağıdaki kod parçacığı yardımcı olabilir:
function fixedEncodeURI(str) {
return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}
İle ilgili olarak encodeURIComponent()
...
RFC 3986'ya (!, ', (,) Ve * ayıran) daha katı olmak için, bu karakterlerin resmileştirilmiş URI sınırlandırma kullanımı olmamasına rağmen, aşağıdakiler güvenle kullanılabilir:
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
Öyleyse, fark nedir? fixedEncodeURI()
ve fixedEncodeURIComponent()
değerlerinin aynı kümesine dönüştürmek, ancak fixedEncodeURIComponent()
aynı zamanda bu seti dönüştürür: +@?=:*#;,$&
. Bu set GET
parametrelerde ( &
, +
vb.), Bağlantı etiketlerinde ( #
), joker karakter etiketlerinde ( *
), e-posta / kullanıcı adı bölümlerinde ( @
) vb. Kullanılır.
Örneğin - kullanıyorsanız encodeURI()
, tarayıcınızın uyumluluğu işlemesi dışında (Chrome'un doğal olarak sıklıkla yaptığı gibi) user@example.com/?email=me@home
ikincisini @
sunucuya düzgün bir şekilde göndermez .