डिकोड्यूरिकोम्पोनेंट और डिकोड्यूरि के बीच अंतर क्या है?


जवाबों:


398

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

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

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

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

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


4
एक और महत्वपूर्ण अंतर यह है कि unescape मल्टी-बाइट UTF-8 अनुक्रम को नहीं संभालता है जबकि डिकोडायरी [घटक] करता है:decodeURIComponent("%C3%A9") == "é"; unescape("%C3%A9") == "é";
क्रिस

IMHO, कुछ उदाहरण देना बहुत उपयोगी होगा
ट्रांसंग

114

एनओडीयूआरआईसीओम्पोनेंट / डिकोड्यूरिकोम्पोनेंट () यूआरआई भागों में अलग-अलग टेक्स्ट स्ट्रिंग्स को एक साथ विभाजित करने और विभाजित करने के लिए लगभग हमेशा जोड़ी है जो आप उपयोग करना चाहते हैं।

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

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

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


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

1
2009 में टूट गया होगा, लेकिन आधुनिक ब्राउज़र ने इस बीच (मेरा अनुमान) पकड़ लिया।
वुड्रोशाइगरु

68
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

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


30

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

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

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

  • encodeURIComponent("&") "% 26" देता है।
  • decodeURIComponent("%26") रिटर्न "&"।
  • encodeURI("&") रिटर्न "&"।
  • decodeURI("%26") "% 26" देता है।

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

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


नोट: पहले डिकोड्यूरिकोम्पोनेंट (n के बजाय m) में एक टाइपो है। मैं इसे सही नहीं कर सकता, क्योंकि मुझे कम से कम 6 पात्रों को संपादित करना है।
सुपरनोवा

23

encodeURIComponent()

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

encodeURI()

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

decodeURIComponent()और decodeURI()ऊपर के विपरीत हैं


12

decodeURIComponent URI के विशेष मार्करों जैसे &;;, #, आदि को डिकोड करेगा, डिकोड्यूरी नहीं करेगा।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.