2009-04-14 13 views

उत्तर

292

इन दोनों के बीच के अंतर को समझाने के लिए मुझे एनकोडुरि और एनकोडुरिकोम्पोनेंट के बीच अंतर समझाएं।

  • encodeURI पूर्ण यूआरआइ पर उपयोग के लिए करना है:

    मुख्य अंतर यह है कि है।

  • एन्कोडुरिकोम्पोनेंट का उपयोग किया जाना है .. अच्छी तरह से .. यूआरआई घटक विभाजक (; /?: @ & = + $, #) के बीच मौजूद किसी भी हिस्से में है।

तो, इन विभाजकों को एन्कोडुरिकॉम्पोनेंट में भी एन्कोड किया जाता है क्योंकि उन्हें पाठ के रूप में माना जाता है और विशेष वर्ण नहीं होते हैं।

अब डीकोड फ़ंक्शंस के बीच के अंतर के लिए, प्रत्येक फ़ंक्शन अपने संबंधित एनकोड समकक्ष द्वारा उत्पन्न विशेष स्ट्रिंग्स और उनके हैंडलिंग के अर्थशास्त्र की देखभाल करने वाले तारों को डीकोड करता है।

+0

एक और महत्वपूर्ण अंतर यह है कि यूनिस्केप मल्टी-बाइट यूटीएफ -8 अनुक्रमों को संभाल नहीं करता है जबकि डीकोडुरि [घटक] करता है: 'डीकोडुरिकोम्पोनेंट ("% सी 3% ए 9") == "é"; अनएस्केप ("% C3% A9") == "एक ©", ' – chris

45
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 

, जबकि encodeURIComponent अतिरिक्त पेट के encodes और स्लेश और प्लस वर्ण, और क्वेरी स्ट्रिंग में इस्तेमाल किया जा करने के लिए है ऐसा लगता है कि encodeURI एन्कोडिंग रिक्त स्थान से एक "सुरक्षित" यूआरआई पैदा करता है और कुछ अन्य (जैसे अमुद्रणीय) वर्ण। + और एन्कोडिंग? और & यहां विशेष महत्व का है, क्योंकि ये क्वेरी स्ट्रिंग में विशेष वर्ण हैं।

10

डीकोडुरिकोम्पोनेंट यूआरआई विशेष मार्कर जैसे &,?, #, आदि, डीकोडुरि को डीकोड करेगा।

20

encodeURIComponent()

एक URL- एनकोडेड स्ट्रिंग में इनपुट में कनवर्ट

encodeURI()

यूआरएल-एन्कोड तो इनपुट, लेकिन मान लिया गया एक पूर्ण URL दिया जाता है, प्रोटोकॉल प्रोटोकॉल एन्कोडिंग द्वारा एक वैध यूआरएल देता है (उदाहरण के लिए http: //) और होस्ट का नाम (उदा। www.stackoverflow.com)।

decodeURIComponent() और decodeURI() ऊपर

89

encodeURIComponent/decodeURIComponent (के विपरीत) लगभग हमेशा जोड़ी आप उपयोग करना, यूआरआई भागों में एक साथ श्रृंखलाबद्ध और बंटवारे के अलावा लेख स्ट्रिंग चाहते हैं।

एन्कोडुरि कम आम में, और भ्रामक रूप से नामित: इसे वास्तव में FixBrokenURI कहा जाना चाहिए। यह ऐसा कुछ लेता है जो लगभग एक यूआरआई है, लेकिन इसमें रिक्त स्थान जैसे अमान्य वर्ण हैं, और इसे वास्तविक यूआरआई में बदल देते हैं।इसका उपयोग उपयोगकर्ता इनपुट से अमान्य यूआरआई को ठीक करने में एक वैध उपयोग है, और इसका उपयोग एक आईआरआई (यूआरआई नंगे यूनिकोड वर्णों के साथ) को एक सादे यूआरआई में बदलने के लिए भी किया जा सकता है (गैर-ASCII को एन्कोड करने के लिए% से बचने वाले यूटीएफ -8 का उपयोग करके))।

decodeURI कुछ विशेष लोगों के लिए छोड़कर decodeURIComponent रूप में एक ही वर्ण डीकोड। यह एन्कोडुरि के विपरीत होने के लिए प्रदान किया जाता है, लेकिन आप अभी भी इसे वापस करने के लिए उस पर भरोसा नहीं कर सकते जैसा आपने मूल रूप से रखा है - उदाहरण देखें। decodeURI(encodeURI('%20 '));

जहां एन्कोडुरि को वास्तव में फिक्सब्रोकुरि(), डीकोडुरि() को संभावित रूप से नामित किया जाना चाहिए, जिसे संभावित रूप से संभावित रूप से कहा जा सकता है BreakMyPreviouslyWorkingURI()। मैं इसके लिए कहीं भी वैध उपयोग के बारे में सोच सकता हूं; से बचें।

+8

decodeURI (encodeURI ('% 20')) '% 20' सही ढंग से यानी, क्रोम और Firefox में, बस जो ब्राउज़र/संस्करण गलत से सोच देता है परिणाम आपने देखा? – ccppjava

+0

200 9 में तोड़ा जा सकता है लेकिन इस दौरान आधुनिक ब्राउज़र पकड़ा गया (मेरा अनुमान)। – WoodrowShigeru

18

जैसा कि मेरे पास एक ही सवाल था, लेकिन यहां जवाब नहीं मिला, मैंने यह पता लगाने के लिए कुछ परीक्षण किए कि वास्तव में अंतर क्या है। मैंने ऐसा किया, क्योंकि मुझे कुछ के लिए एन्कोडिंग की आवश्यकता है, जो यूआरएल/यूआरआई से संबंधित नहीं है।

  • encodeURIComponent("A") रिटर्न 'ए', यह 'ए' के ​​लिए "% 41"
  • decodeURIComponent("%41") रिटर्न 'ए' सांकेतिक शब्दों में बदलना नहीं है।
  • encodeURI("A") रिटर्न 'ए', यह 'ए' के ​​लिए "% 41"
  • decodeURI("%41") रिटर्न 'ए' सांकेतिक शब्दों में बदलना नहीं है।

-इसका मतलब है कि दोनों अल्फान्यूमेरिक वर्णों को डीकोड कर सकते हैं, भले ही वे उन्हें एन्कोड न करें। हालांकि ...

  • encodeURIComponent("&") "% 26" देता है।
  • decodeURIComponent("%26") "&" देता है।
  • encodeURI("&") "" देता है।
  • decodeURI("%26") "% 26" देता है।

भले ही encodeURIComponent सभी वर्णों को एन्कोड नहीं करता है, decodeURIComponent% 00 और% 7F के बीच किसी भी मान को डीकोड कर सकता है।

नोट: ऐसा प्रतीत होता है कि यदि आप% 7F से ऊपर मान को डीकोड करने का प्रयास करते हैं (जब तक कि यह एक यूनिकोड मान न हो), तो आपकी स्क्रिप्ट "यूआरआई त्रुटि" के साथ विफल हो जाएगी।

+0

नोट: पहले decodeURIComponent (एन के बजाय एम) में एक टाइपो है। मैं इसे सही नहीं कर सकता, क्योंकि मुझे कम से कम 6 अक्षर संपादित करना है। – SuperNova

संबंधित मुद्दे