JavaScript işlevleri decodeURIComponent
ile arasındaki fark nedir decodeURI
?
JavaScript işlevleri decodeURIComponent
ile arasındaki fark nedir decodeURI
?
Yanıtlar:
Bu ikisi arasındaki farkı açıklamak için encodeURI
ve arasındaki farkı açıklayayım encodeURIComponent
.
Temel fark şudur:
encodeURI
Fonksiyonu tam URI kullanılmak üzere tasarlanmıştır.encodeURIComponent
Fonksiyonu herhangi bir parçası olduğunu .. iyi .. URI bileşenlerde kullanmak amaçlı olduğunu ayırıcılar arasındaki yalanlar (; /: @ & = + $, #?).Bu nedenle, encodeURIComponent
bu ayırıcılar ayrıca özel karakterler değil, metin olarak kabul edildiğinden kodlanır.
Şimdi, kod çözme işlevleri arasındaki farka geri dönersek, her bir işlev, özel karakterlerin anlambilimine ve bunların işlenmesine dikkat ederek karşılık gelen kodlama karşılığı tarafından üretilen dizeleri çözer.
encodeURIComponent / decodeURIComponent (), URI parçalarındaki metin dizelerini birlikte birleştirmek ve ayırmak için neredeyse her zaman kullanmak istediğiniz çifttir.
encodeURI daha az yaygın ve yanıltıcı bir şekilde adlandırılmış: gerçekten fixBrokenURI olarak adlandırılmalıdır. Neredeyse bir URI olan bir şey alır, ancak içinde boşluklar gibi geçersiz karakterler vardır ve bunu gerçek bir URI'ye dönüştürür. Kullanıcı girişinden geçersiz URI'ları düzeltmek için geçerli bir kullanımı vardır ve ayrıca bir IRI'yi (çıplak Unicode karakterleri olan URI) düz bir URI'ye (ASCII olmayan kodlamak için% -escaped UTF-8 kullanarak) kullanmak için de kullanılabilir ).
decodeURI, birkaç özel karakter dışında decodeURIComponent ile aynı karakterlerin kodunu çözer. EnkoderiURI'nın tersi olması sağlanmıştır, ancak başlangıçta koyduğunuz gibi geri dönmek için buna güvenemezsiniz - bkz. decodeURI(encodeURI('%20 '));
.
EncodeURI'nin gerçekten fixBrokenURI () olarak adlandırılması gereken yerlerde, decodeURI () eşit olarak potansiyel olarakBreakMyPreviouslyWorkingURI () olarak adlandırılabilir. Hiçbir yerde geçerli bir kullanım düşünemiyorum; önlemek.
js> s = "http://www.example.com/string with + and ? and & and spaces";
http://www.example.com/string with + and ? and & and spaces
js> encodeURI(s)
http://www.example.com/string%20with%20+%20and%20?%20and%20&%20and%20spaces
js> encodeURIComponent(s)
http%3A%2F%2Fwww.example.com%2Fstring%20with%20%2B%20and%20%3F%20and%20%26%20and%20spaces
Görünüşe göre encodeURI
ise, kodlayan alanları ve diğer bazı (örneğin, basılamaz) karakterleriyle "güvenli" bir URI üreten encodeURIComponent
ek kolon ve çizgi artı karakter kodlar ve sorgu dizeleri kullanılmak üzere tasarlanmıştır. + Ve? ve & burada özellikle önemlidir, çünkü bunlar sorgu dizelerindeki özel karakterlerdir.
Aynı soruyu sordum, ancak cevabı burada bulamadığım için, farkın gerçekte ne olduğunu anlamak için bazı testler yaptım. URL / URI ile ilgili olmayan bir şey için kodlamaya ihtiyacım olduğundan bunu yaptım.
encodeURIComponent("A")
"A" döndürürse, "A" yı "% 41" olarak kodlamazdecodeURIComponent("%41")
"A" döndürür.encodeURI("A")
"A" döndürürse, "A" yı "% 41" olarak kodlamazdecodeURI("%41")
"A" döndürür.-Bu, her ikisini de kodlamasalar bile alfasayısal karakterlerin kodunu çözebileceği anlamına gelir. Ancak...
encodeURIComponent("&")
"% 26" değerini döndürür.decodeURIComponent("%26")
İadeler "&".encodeURI("&")
İadeler "&".decodeURI("%26")
"% 26" değerini döndürür.EncodeURIComponent tüm karakterleri kodlamasa da, decodeURIComponent% 00 ile% 7F arasındaki herhangi bir değerin kodunu çözebilir.
Not:% 7F'nin üzerindeki bir değeri kod çözmeyi denerseniz (bir unicode değeri değilse), komut dosyanız "URI hatası" ile başarısız olur.
encodeURIComponent()
Girdiyi URL kodlu bir dizeye dönüştürür
encodeURI()
URL, girdiyi kodlar, ancak tam bir URL'nin verildiğini varsayar, bu nedenle protokolü (ör. Http: // ) ve ana bilgisayar adını (ör. Www.stackoverflow.com ) kodlayarak geçerli bir URL döndürür .
decodeURIComponent()
ve decodeURI()
yukarıdakilerin tam tersi
encodeURIComponent Kaçamadı:
A-Z a-z 0-9 - _ . ! ~ * ' ( )
encodeURI () Kaçamadı:
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI
decodeURIComponent("%C3%A9") == "é"; unescape("%C3%A9") == "é";