दिलचस्प पोस्ट
क्यों ट्क्लर अपने `expr`essions को कसने का सुझाव देते हैं? ड्रॉपडाउन सूची डेटा स्रोत Htaccess: यूआरएल से पीछे वाले स्लैश जोड़ें / निकालें ओरेकल में कॉलमों को अल्पविराम विभाजित किए गए मान को विभाजित करें मैं जावास्क्रिप्ट में दो तिथियों के बीच अंतर कैसे प्राप्त करूं? पायथन एचटीएमएल सेंनेटर / स्क्रबर / फिल्टर ES6 वर्ग उदाहरण का वर्ग नाम प्राप्त करें jQuery .val () बनाम .attr ("मान") कोड गोल्फ: शब्दों की संख्या एंड्रॉइड सूचीदृश्य पंक्ति हटाने एनीमेशन php.ini & SMTP = – आप उपयोगकर्ता नाम और पासवर्ड कैसे पास करते हैं पासवर्ड को हैशिंग और एन्क्रिप्ट करने में अंतर कैसे अपनी निजी रजिस्ट्री के बिना एक निजी एनपीएम मॉड्यूल को स्थापित करें? अलार्म व्यवस्थापक Android प्रत्येक दिन जावास्क्रिप्ट: गतिशील रूप से नेस्टेड ऑब्जेक्ट्स को एक ऑरेंज द्वारा दिए गए ऑब्जेक्ट नामों का उपयोग करने के लिए कैसे करें

जावास्क्रिप्ट में यूआरएल यूआरएल?

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

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

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

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट में यूआरएल यूआरएल?"

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

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

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

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

  • encodeURI() एन्कोड नहीं होगा: ~!@#$&*()=:/,;?+'

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

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

स्टैक अतिप्रवाह प्रश्न देखें श्रेष्ठ अभ्यास: भागने, या आगे की चर्चा के लिए encodeuri / encodeurIComponent

encodeURIComponent() साथ छड़ी यूआरएल (जैसे "#", "?", और "और") में सिमेंटिक महत्व वाले कई अक्षर सांकेतिक शब्दों में बदलना करने के लिए फ़ंक्शन encodeURI() परेशान नहीं करता है। escape() को नापसंद किया जाता है, और "+" वर्णों को सांकेतिकृत करने के लिए परेशान नहीं होता है, जिसे सर्वर पर एन्कोडेड रिक्त स्थान के रूप में समझा जाएगा (और, जैसा कि यहाँ दूसरों के द्वारा बताया गया है, ठीक से URL- सांकेतिक शब्दों में गैर-एएससीआईआई अक्षर नहीं है)।

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

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

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

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

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

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

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

एन्कोडुरिक कॉमोनेंट () ये जाने का तरीका है

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

लेकिन आपको यह ध्यान रखना चाहिए कि php संस्करण urlencode () से छोटे मतभेद हैं और @ सीएमएस के रूप में उल्लिखित हैं, यह हर चार को सांकेतिक शब्दों में बदलना नहीं होगा http://phpjs.org/functions/urlencode/ पर लड़कों को 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, '+'); } 

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

 encodeURI() 

तथा

 encodeURIComponent() 

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

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

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

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

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

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

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

डबल एन्कोडिंग को रोकने के लिए यह एन्कोडिंग से पहले यूआरएल को डीकोड करने का एक अच्छा विचार है (उदाहरण के लिए यदि आपने यूआरएल दर्ज किया है, जो पहले से ही एन्कोड किया गया है)।

कहें कि इनपुट के रूप में हमारे पास abc%20xyz 123 (एक स्थान पहले ही एन्कोड किया गया है):

 encodeURI("abc%20xyz 123") // wrong: "abc%2520xyz%20123" encodeURI(decodeURI("abc%20xyz 123")) // correct: "abc%20xyz%20123" 

मेरे लिए कुछ भी काम नहीं हुआ मैं देख रहा था कि लॉग-इन पेज का एचटीएमएल, कोड 200 के साथ क्लाइंट साइड पर वापस आ रहा है। (302 पहले लेकिन उसी अजाक्स अनुरोध को लॉग इन पेज को एक और अजाक्स अनुरोध के अंदर लोड किया गया था, जिसे रीडायरेक्ट होने के बजाय सादा लोड हो रहा था। लॉगिन पृष्ठ का पाठ)

लॉगिन नियंत्रक में, मैंने यह रेखा जोड़ा:

 Response.Headers["land"] = "login"; 

और वैश्विक अजाक्स हैंडलर में, मैंने यह किया है:

 $(function () { var $document = $(document); $document.ajaxSuccess(function (e, response, request) { var land = response.getResponseHeader('land'); var redrUrl = '/login?ReturnUrl=' + encodeURIComponent(window.location); if(land) { if (land.toString() === 'login') { window.location = redrUrl; } } }); }); 

अब मुझे कोई समस्या नहीं है, और यह एक जादू की तरह काम करता है

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

     var url = $ (स्थान) .attr ('href');  // वर्तमान यूआरएल मिलता है
     // या
     var url = 'फ़ोल्डर / index.html? param = # 23dd & noob = yes';  // या एक निर्दिष्ट करें 

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

आप एस्पी लाइब्रेरी का उपयोग कर सकते हैं और नीचे दिए गए फ़ंक्शन का उपयोग करके अपने यूआरएल को एन्कोड कर सकते हैं। फ़ंक्शन यह सुनिश्चित करता है कि '/' एन्कोडिंग में नहीं खोया जाता है जबकि पाठ सामग्री का शेष एन्कोड किया जाता है:

 function encodeUrl(url) { String arr[] = url.split("/"); String encodedUrl = ""; for(int i = 0; i<arr.length; i++) { encodedUrl = encodedUrl + ESAPI.encoder().encodeForHTML(ESAPI.encoder().encodeForURL(arr[i])); if(i<arr.length-1) encodedUrl = encodedUrl + "/"; } return url; } 

https://www.owasp.org/index.php/ESAPI_JavaScript_Readme