javascript - समझ - प्रपत्र एचटीएमएल




जावास्क्रिप्ट में एनकोड यूआरएल? (9)

यूआरएल एन्कोडिंग क्या है:

URL के अंदर स्थित विशेष वर्ण होने पर एक यूआरएल एन्कोड किया जाना चाहिए। उदाहरण के लिए:

console.log(encodeURIComponent('?notEncoded=&+'));

हम इस उदाहरण में देख सकते हैं कि स्ट्रिंग को छोड़कर सभी वर्णों को एन्कोडेड% संकेतों के साथ एन्कोड किया गया है। यूआरएल एन्कोडिंग को प्रतिशत एन्कोडिंग के रूप में भी जाना जाता है क्योंकि यह% के साथ सभी विशेष पात्रों से बच निकलता है। फिर इस% संकेत के बाद प्रत्येक विशेष चरित्र का एक अद्वितीय कोड होता है

हमें यूआरएल एन्कोडिंग की आवश्यकता क्यों है:

यूआरएल स्ट्रिंग में कुछ अक्षरों का विशेष मान होता है। उदाहरण के लिए,? चरित्र एक क्वेरी स्ट्रिंग की शुरुआत को दर्शाता है। सफलतापूर्वक वेब पर संसाधन का पता लगाने के लिए, स्ट्रिंग या यूआरएल संरचना के हिस्से के रूप में एक चरित्र के रूप में वर्णित होने के बीच में अंतर करने के लिए यह necesarry है।

हम जेएस में यूआरएल एन्कोडिंग कैसे प्राप्त कर सकते हैं:

जेएस उपयोगिता समारोह में निर्माण का एक गुच्छा प्रदान करता है जिसे हम यूआरएल को आसानी से एन्कोड करने के लिए उपयोग कर सकते हैं। ये दो सुविधाजनक विकल्प हैं:

  1. encodeURIComponent() : एक यूआरआई के एक तर्क के रूप में एक घटक लेता है और एन्कोडेड यूआरआई स्ट्रिंग देता है।
  2. encodeURI() : एक यूआरआई को तर्क के रूप में लेता है और एन्कोडेड यूआरआई स्ट्रिंग देता है।

उदाहरण और चेतावनी:

पूरे यूआरएल (योजना सहित, जैसे https: //) में encodeURIComponent() में गुजरने से अवगत रहें। यह वास्तव में इसे एक कार्यात्मक यूआरएल में बदल सकता है। उदाहरण के लिए:

// for a whole URI don't use encodeURIComponent it will transform
// the / characters and the URL won't fucntion properly
console.log(encodeURIComponent("http://www.random.com/specials&char.html"));

// instead use encodeURI for whole URL's
console.log(encodeURI("http://www.random.com/specials&char.html"));

हम देख सकते हैं कि हम पूरे यूआरएल को encodeURIComponent में डालते हैं कि फव्वारा स्लेश (/) को विशेष वर्णों में भी परिवर्तित कर दिया जाता है। इससे यूआरएल ठीक से काम नहीं करेगा।

इसलिए (जैसा कि नाम का तात्पर्य है) उपयोग करें:

  1. एक यूआरएल के एक निश्चित हिस्से पर encodeURIComponent जिसे आप एन्कोड करना चाहते हैं।
  2. encodeURI एक पूरे यूआरएल पर जिसे आप एन्कोड करना चाहते हैं।

आप जावास्क्रिप्ट का उपयोग करके यूआरएल को सुरक्षित रूप से एन्कोड कैसे करते हैं जैसे इसे जीईटी स्ट्रिंग में रखा जा सकता है?

var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;

मुझे लगता है कि आपको उस दूसरी पंक्ति पर myUrl चर को एन्कोड करने की आवश्यकता है?


encodeURIComponent () जाने का रास्ता है।

var myOtherUrl = "http://example.com/index.html?url=" + encodeURIComponent(myUrl);

लेकिन आपको यह ध्यान में रखना चाहिए कि PHP संस्करण urlencode() से भिन्न अंतर हैं और @CMS के रूप में उल्लेख किया गया है, यह प्रत्येक चार को एन्कोड नहीं करेगा। http://phpjs.org/functions/urlencode/ पर दोस्तों ने phpencode() को phpencode() बराबर बनाया है:

function urlencode(str) {
  str = (str + '').toString();

  // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
  // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
  return encodeURIComponent(str)
    .replace(/!/g, '%21')
    .replace(/'/g, '%27')
    .replace(/\(/g, '%28')
    .replace(/\)/g, '%29')
    .replace(/\*/g, '%2A')
    .replace(/%20/g, '+');
}

आपके पास तीन विकल्प हैं:

  • escape() एन्कोड नहीं करेगा: @*/+

  • encodeURI() एन्कोड नहीं करेगा: [email protected]#$&*()=:/,;?+'

  • encodeURIComponent() एन्कोड नहीं करेगा: ~!*()'

लेकिन आपके मामले में, यदि आप किसी अन्य URL GET पैरामीटर में URL पास करना चाहते हैं, तो आपको escape या encodeURIComponent उपयोग करना चाहिए, लेकिन encodeURI नहीं।

स्टैक ओवरफ़्लो प्रश्न देखें सर्वोत्तम अभ्यास: आगे की चर्चा के लिए बचें, या एनकोडुरि / एनकोडुरिकॉम्पोनेंट


एक यूआरएल एन्कोड करने के लिए, जैसा कि पहले कहा गया है, आपके पास दो कार्य हैं:

encodeURI()

तथा

encodeURIComponent()

दोनों मौजूद कारण यह है कि पहले यूआरएल को बहुत से चीजों को छोड़ने के जोखिम के साथ संरक्षित किया जाता है, जबकि दूसरा आवश्यक सब कुछ एन्कोड करता है।

सबसे पहले, आप नए एस्केप किए गए यूआरएल को एड्रेस बार में कॉपी कर सकते हैं (उदाहरण के लिए) और यह काम करेगा। हालांकि आपके अनचाहे '&' फ़ील्ड डिलीमीटर के साथ हस्तक्षेप करेंगे, '=' फ़ील्ड नामों और मानों में हस्तक्षेप करेगा, और '+' रिक्त स्थान की तरह दिखेगा। लेकिन सरल डेटा के लिए जब आप यूआरएल प्रकृति को बचाना चाहते हैं, तो यह काम करता है।

दूसरी बात यह है कि यह सुनिश्चित करने के लिए कि आपको अपनी स्ट्रिंग में कुछ भी यूआरएल के साथ हस्तक्षेप नहीं करना है। यह विभिन्न महत्वहीन पात्रों को छोड़ देता है ताकि यूआरएल हस्तक्षेप के बिना जितना संभव हो सके मानव पठनीय के रूप में बनी रहे। इस तरह से एन्कोड किया गया एक यूआरएल अब यूआरएल के रूप में काम नहीं कर पाएगा।

तो यदि आप समय ले सकते हैं, तो आप हमेशा क्वेरी स्ट्रिंग में जोड़ने से पहले इस फ़ंक्शन का उपयोग करके नाम और मान दोनों को एन्कोड करने के पहले नाम / मूल्य जोड़े को एन्कोड करने से पहले encodeURIComponent () का उपयोग करना चाहते हैं।

मुझे encodeURI () का उपयोग करने के कारणों के साथ एक कठिन समय आ रहा है - मैं इसे समझदार लोगों को छोड़ दूंगा।


निजी तौर पर, मुझे लगता है कि कई एपीआई "+" के साथ "" बदलना चाहते हैं, इसलिए मैं निम्नलिखित का उपयोग करता हूं:

encodeURIComponent(value).replace(/%20/g,'+');

अलग-अलग ब्राउज़रों में escape को अलग-अलग कार्यान्वित किया जाता है और encodeURI उन अधिकांश पात्रों को एन्कोड नहीं करता है जो यूआरआई (जैसे # और यहां तक ​​कि /) में कार्यात्मक होते हैं - इसे बिना किसी ब्रेक के पूर्ण यूआरआई / यूआरएल पर इस्तेमाल किया जाता है।

नोट : आप क्वेरी स्ट्रिंग में मानों के लिए encodeURIComponent का उपयोग करते हैं (फ़ील्ड / मान नाम नहीं और निश्चित रूप से संपूर्ण यूआरएल नहीं)। यदि आप इसे किसी अन्य तरीके से करते हैं तो यह =,?, और संभवतः आपकी क्वेरी स्ट्रिंग को छोड़कर वर्णों को एन्कोड नहीं करेगा।

उदाहरण:

const escapedValue = encodeURIComponent(value).replace(/%20/g,'+');
const url = 'http://example.com/?myKey=' + escapedValue;

बिल्ट-इन फ़ंक्शन encodeURIComponent(str) और encodeURI(str)
आपके मामले में, यह काम करना चाहिए:

var myOtherUrl = 
       "http://example.com/index.html?url=" + encodeURIComponent(myUrl);

यदि आप jQuery का उपयोग कर रहे हैं तो मैं $.param विधि के लिए जाऊंगा। यह यूआरएल किसी ऑब्जेक्ट मैपिंग फ़ील्ड को मानों पर एन्कोड करता है, जो प्रत्येक मान पर एक एस्केप विधि को कॉल करने से पढ़ने के लिए आसान है।

$.param({a:"1=2", b:"Test 1"}) // gets a=1%3D2&b=Test+1

सामान्य जावास्क्रिप्ट के साथ मैंने इसी तरह की चीज की कोशिश की

function fixedEncodeURIComponent(str){
     return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}

एनकोड यूआरएल स्ट्रिंग

    var url = $(location).attr('href'); //get current url
    //OR
    var url = 'folder/index.html?param=#23dd&noob=yes'; //or specify one

var encodedUrl = encodeURIComponent(url);
console.log(encodedUrl);
//outputs folder%2Findex.html%3Fparam%3D%2323dd%26noob%3Dyes


for more info go http://www.sitepoint.com/jquery-decode-url-string





encoding