आप का उपयोग नहीं किया जाना चाहिए encodeURIComponent()
या encodeURI()
। आपको MDN प्रलेखन के अनुसार, का उपयोग करना चाहिए fixedEncodeURIComponent()
और fixedEncodeURI()
।
के बारे में encodeURI()
...
यदि कोई URL के लिए अधिक हाल के RFC3986 का अनुसरण करना चाहता है, जो वर्ग कोष्ठक (IPv6 के लिए) आरक्षित करता है और इस प्रकार एन्कोड नहीं किया जाता है, तो ऐसा कुछ बनता है जो URL का हिस्सा हो सकता है (जैसे होस्ट), निम्न कोड स्निपेट मदद कर सकता है:
function fixedEncodeURI(str) {
return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}
के बारे में encodeURIComponent()
...
RFC 3986 (जो आरक्षित है ?,, (,),), और *) का पालन करने में अधिक कठोर होने के लिए, भले ही इन वर्णों में कोई औपचारिक यूआरआई परिसीमन उपयोग न हो, निम्नलिखित सुरक्षित रूप से उपयोग किया जा सकता है:
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
तो अंतर क्या है? fixedEncodeURI()
और fixedEncodeURIComponent()
मूल्यों के एक ही सेट को fixedEncodeURIComponent()
परिवर्तित करें , लेकिन इस सेट को भी रूपांतरित करता है +@?=:*#;,$&
:। यह सेट GET
पैरामीटर ( &
और +
, आदि), एंकर टैग ( #
), वाइल्डकार्ड टैग ( *
), ईमेल / उपयोगकर्ता नाम भागों ( @
), आदि में उपयोग किया जाता है।
उदाहरण के लिए - यदि आप उपयोग करते हैं encodeURI()
, तो संगतता को संभालने वाले आपके ब्राउज़र को छोड़कर, सर्वर पर user@example.com/?email=me@home
दूसरे @
को ठीक से नहीं भेजेंगे (जैसा कि क्रोम स्वाभाविक रूप से अक्सर करता है)।