जब आप एनकोडरिएरी / एनकोडाउरीकोम्पोनेंट के बजाय भागने का उपयोग करने वाले हों?


1392

वेब सर्वर पर भेजे जाने के लिए क्वेरी स्ट्रिंग को एन्कोडिंग करते समय - आप escape()कब उपयोग करते हैं और कब उपयोग करते हैं encodeURI()या encodeURIComponent():

भागने का उपयोग करें:

escape("% +&=");

या

एनकोडाइरी () / एन्कोडर्कोम्पोनेंट () का उपयोग करें

encodeURI("http://www.google.com?var1=value1&var2=value2");

encodeURIComponent("var1=value1&var2=value2");

111
बाहर है कि इसके लायक ओर इशारा करते है encodeURIComponent("var1=value1&var2=value2")है नहीं सामान्य उपयोग के मामले। यह उदाहरण एन्कोड करेगा =और &, जो संभवत: वैसा नहीं था जैसा कि इरादा था! encodeURIComponentआम तौर पर प्रत्येक कुंजी मूल्य जोड़ी (प्रत्येक के बाद का हिस्सा =) में मूल्य के लिए अलग से लागू किया जाता है ।
तीमुथियुस शील्ड

3
क्या आपको कुंजी को कुछ भी करने की आवश्यकता है? क्या होगा अगर इसमें एक = है? (क्या यह भी संभव है?)
माला

3
@ मलाला मैं अभी भी सामान्य रूप से वेब प्रोग्रामिंग के लिए नया हूं, लेकिन मैंने अपने सीमित अनुभव में जो प्रयोग किया है वह कुंजी और मूल्य को अलग-अलग करना है, जिससे '=' बना रहता है: var params = encodeURIComponent(key) + '=' + encodeURIComponent(value);- हो सकता है कि कोई और बेहतर तरीका जानता हो।
नृशंस

1
@ अक्षर मैं उस के साथ खेल रहा था, लेकिन जहां तक ​​मैं बता सकता हूं कि कुंजी एन्कोडेड नहीं लगती ... कम से कम उसी तरह से नहीं। शायद यह कुंजी में = के लिए कल्पना के खिलाफ है?
माला

1
यह भी इंगित करने के लायक है कि हाल ही में जावास्क्रिप्ट कार्यान्वयन URL और उनके क्वेरी स्ट्रिंग में हेरफेर करने के लिए उच्च-स्तरीय इंटरफेस URL और URLSearchParams प्रदान करते हैं।
बार्ट रॉबिन्सन

जवाबों:


1914

पलायन()

इसका उपयोग न करें! escape()खंड B.2.1.2 भागने में परिभाषित किया गया है और अनुलग्नक B का परिचय पाठ कहता है:

... इस अनुलग्नक में निर्दिष्ट सभी भाषा विशेषताओं और व्यवहारों में एक या एक से अधिक अवांछनीय विशेषताएं हैं और विरासत के उपयोग की अनुपस्थिति में इस विनिर्देश को हटा दिया जाएगा। ...
... प्रोग्रामर को नए ECMAScript कोड लिखते समय इन सुविधाओं और व्यवहारों के अस्तित्व का उपयोग या मान नहीं करना चाहिए ...।

व्यवहार:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape

विशेष वर्ण इसके अपवाद के साथ एन्कोड किए गए हैं: @ * _ + -।)

वर्णों के लिए हेक्साडेसिमल फॉर्म, जिसका कोड यूनिट मूल्य 0xFF या उससे कम है, दो अंकों का भागने का क्रम है %xx:।

अधिक कोड इकाई वाले वर्णों के लिए, चार अंकों के प्रारूप %uxxxxका उपयोग किया जाता है। इसे क्वेरी स्ट्रिंग के भीतर अनुमति नहीं है (जैसा कि RFC3986 में परिभाषित किया गया है ):

query       = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded   = "%" HEXDIG HEXDIG
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

एक प्रतिशत चिन्ह की अनुमति केवल तभी दी जाती है जब उसे सीधे दो हेक्सिडिट्स द्वारा पीछा किया जाता uहै , उसके बाद प्रतिशत को अनुमति नहीं दी जाती है।

encodeURI ()

जब आप एक कामकाजी URL चाहते हैं, तो encodeURI का उपयोग करें। यह कॉल करें:

encodeURI("http://www.example.org/a file with spaces.html")

लेना:

http://www.example.org/a%20file%20with%20spaces.html

क्योंकि यह URL को नष्ट कर देगा और वापस लौटेगा, तो encodeURIComponent को कॉल न करें

http%3A%2F%2Fwww.example.org%2Fa%20file%20with%20spaces.html

encodeURIComponent ()

जब आप URL पैरामीटर के मान को एनकोड करना चाहते हैं, तो encodeURIComponent का उपयोग करें।

var p1 = encodeURIComponent("http://example.org/?a=12&b=55")

तब आप अपनी जरूरत का URL बना सकते हैं:

var url = "http://example.net/?param1=" + p1 + "&param2=99";

और आपको यह पूरा URL मिलेगा:

http://example.net/?param1=http%3A%2F%2Fexample.org%2F%Ffa%3D12%26b%3D55&param2=99

ध्यान दें कि एनकोडरिकम्पोनेंट 'चरित्र से बच नहीं जाता है। एक सामान्य बग का उपयोग html विशेषताएँ बनाने के लिए किया जाता है href='MyUrl', जैसे कि एक इंजेक्शन बग को पीड़ित कर सकता है। यदि आप स्ट्रिंग्स से html का निर्माण कर रहे हैं, तो या तो विशेषता उद्धरण "के 'लिए उपयोग करें, या एन्कोडिंग की एक अतिरिक्त परत जोड़ें ( '% 27 के रूप में एन्कोड किया जा सकता है)।

इस प्रकार की एन्कोडिंग के बारे में अधिक जानकारी के लिए आप देख सकते हैं: http://en.wikipedia.org/wiki/Percent-encoding


31
@Francois, प्राप्त करने वाले सर्वर के आधार पर, यह ठीक से डिकोड नहीं कर सकता है कि एस्केप ऊपरी ASCII या गैर-ASCII वर्णों को कैसे एनकोड करता है जैसे: âầẩẫấậêềểễếệ उदाहरण के लिए, पायथन के फील्डस्टोरेज वर्ग उपरोक्त स्ट्रिंग को ठीक से डिकोड नहीं करेगा यदि एनकोडेड बाय बाय बच जाए।
रे

22
@Francois एस्केप () अक्षरों, अंकों, और *@@__+/ को छोड़कर निचले 128 ASCII वर्णों को एन्कोड करता है जबकि अनस्केप (एस्केप) () से उलटा है। जहाँ तक मैं बता सकता हूँ, वे विरासत URL एन्कोडिंग के लिए डिज़ाइन किए गए कार्य हैं और अभी भी केवल पश्चगामी संगतता के लिए लागू किए गए हैं। आम तौर पर, उनका उपयोग तब तक नहीं किया जाना चाहिए जब तक कि उनके लिए डिज़ाइन किए गए ऐप / वेब सेवा / आदि के साथ बातचीत न करें।
एंथनी डिसेंटी

3
जब तक आप एक URL को URI घटक के रूप में पारित करने की कोशिश नहीं कर रहे हैं, जिस स्थिति में यह एनकोडाउरीकोम्पोनेंट कहलाता है।
टॉम

4
यह एकल उद्धरण क्यों नहीं संभालती है?
एरिक

11
@ एरिक यह एकल-उद्धरण को एनकोड नहीं करता है, क्योंकि एकल-उद्धरण एक URI ( RFC-3986 ) के भीतर होने के लिए पूरी तरह से मान्य चरित्र है । समस्या तब होती है जब आप HTML के भीतर एक URI को एम्बेड करते हैं, जहां एकल-उद्धरण एक मान्य वर्ण नहीं है। यह तो इस प्रकार है, यूआरआई भी होना चाहिए कि "एचटीएमएल एन्कोड" (जो की जगह लेंगे 'साथ 'एक HTML दस्तावेज़ में रखा जा रहा से पहले)।
ली

441

अंतर encodeURI()और encodeURIComponent()11 अक्षर वास्तव में एन्कोडर्कोम्पोनेंट द्वारा एन्कोड किए गए हैं, लेकिन एनकोडाउरी द्वारा नहीं:

EncodeURI और encodeURIComponent के बीच दस अंतरों के साथ तालिका

मैंने इस कोड के साथ Google Chrome में कंसोल.टेबल के साथ इस तालिका को आसानी से जनरेट किया है :

var arr = [];
for(var i=0;i<256;i++) {
  var char=String.fromCharCode(i);
  if(encodeURI(char)!==encodeURIComponent(char)) {
    arr.push({
      character:char,
      encodeURI:encodeURI(char),
      encodeURIComponent:encodeURIComponent(char)
    });
  }
}
console.table(arr);


क्या यह ब्राउज़र निर्भर नहीं है?
23

4
@bladnman encodeURI और encodeURIComponent को सभी प्रमुख ब्राउज़रों में इस तरह से काम करना चाहिए। आप क्रोम और फ़ायरफ़ॉक्स में उपरोक्त कोड का समर्थन दोनों कंसोल के रूप में कर सकते हैं। अन्य ब्राउज़रों में (फ़ायरफ़ॉक्स और क्रोम सहित) आप निम्नलिखित कोड का उपयोग कर सकते हैं:var arr=[]; for(var i=0;i<256;i++){var char=String.fromCharCode(i); if(encodeURI(char)!==encodeURIComponent(char)) console.log("character: "+char + " | encodeURI: " +encodeURI(char) + " |encodeURIComponent: " + encodeURIComponent(char) ) }
जोहान ईचावरिया

1
मेरा मतलब @Pacerier :)
जोहान एचावरिया

@ स्पेसर विभिन्न ब्राउज़रों में समान होना चाहिए जब तक कि मूल कल्पना बहुत अस्पष्ट न हो ... यह भी देखें stackoverflow.com/questions/4407599/…
क्रिस्टोफ रूसो

2
मुझे लगता है कि कई बार यह अद्यतन करने की आवश्यकता है! दुर्भाग्य से केवल एक बार बढ़ सकता है।
रमज़ान पोलाट

46

मुझे यह लेख ज्ञानवर्धक लगा: जावास्क्रिप्ट पागलपन: क्वेरी स्ट्रिंग पार्सिंग

मैंने पाया कि जब मैं यह समझने की कोशिश कर रहा था कि डिकोड्यूरिकोम्पोनेंट सही तरीके से '+' डिकोडिंग क्यों नहीं कर रहा है। यहाँ एक उद्धरण है:

String:                         "A + B"
Expected Query String Encoding: "A+%2B+B"
escape("A + B") =               "A%20+%20B"     Wrong!
encodeURI("A + B") =            "A%20+%20B"     Wrong!
encodeURIComponent("A + B") =   "A%20%2B%20B"   Acceptable, but strange

Encoded String:                 "A+%2B+B"
Expected Decoding:              "A + B"
unescape("A+%2B+B") =           "A+++B"       Wrong!
decodeURI("A+%2B+B") =          "A+++B"       Wrong!
decodeURIComponent("A+%2B+B") = "A+++B"       Wrong!

11
आपके द्वारा लिंक किए गए लेख में बहुत सारी बकवास है। यह मुझे लगता है, लेखक को खुद समझ में नहीं आया कि फ़ंक्शंस का सही उपयोग किस लिए किया जाता है ...
क्रिस्टोफ़

2
@Christoph यह सब मुझे उचित लगता है। विशेष रूप से, मैं उसके साथ सहमत हूं जो encodeURIऐसा लगता है कि यह केवल काफी अस्पष्ट किनारे के मामले में उपयोगी है और वास्तव में मौजूद नहीं है। मेरे पास उनके साथ कुछ मतभेद हैं, लेकिन मुझे कुछ भी गलत या गलत नहीं लगता। आपको क्या लगता है कि यह बकवास है?
मार्क अमेरी सिप

1
तत्व की enctypeविशेषता FORMसर्वर को प्रस्तुत करने के लिए सेट किए गए डेटा प्रकार को एन्कोड करने के लिए उपयोग की जाने वाली सामग्री प्रकार को निर्दिष्ट करती है। एप्लिकेशन / x-www-form-urlencoded यह डिफ़ॉल्ट सामग्री प्रकार है। इस सामग्री प्रकार के साथ जमा किए गए फ़ॉर्म निम्नानुसार एन्कोड किए जाने चाहिए: [...] अंतरिक्ष वर्णों को `` + 'से बदल दिया जाता है, और [...] गैर-अल्फ़ान्यूमेरिक वर्णों को'% HH ', [...] से बदल दिया जाता है Ref: एचटीएमएल 4 सेप
साइकोइए

2
encodeURIComponent ('A + B')। (/ \% 20 / g, '+') + \ n '+ decodeURIComponent ("A +% 2B + B" .replace (/ + + / g,'% 20 ') बदलें। ));
Zlatin Zlatev 8

39

encodeURIComponent को सांकेतिक शब्दों में बदलना नहीं है -_.!~*'(), जिससे xml स्ट्रिंग में php पर डेटा पोस्ट करने में समस्या होती है।

उदाहरण के लिए:
<xml><text x="100" y="150" value="It's a value with single quote" /> </xml>

के साथ सामान्य बच encodeURI
%3Cxml%3E%3Ctext%20x=%22100%22%20y=%22150%22%20value=%22It's%20a%20value%20with%20single%20quote%22%20/%3E%20%3C/xml%3E

आप देख सकते हैं, एकल उद्धरण एन्कोडेड नहीं है। समस्या को हल करने के लिए, मैंने अपनी परियोजना में समस्या को हल करने के लिए दो कार्य बनाए हैं, एनकोडिंग URL के लिए:

function encodeData(s:String):String{
    return encodeURIComponent(s).replace(/\-/g, "%2D").replace(/\_/g, "%5F").replace(/\./g, "%2E").replace(/\!/g, "%21").replace(/\~/g, "%7E").replace(/\*/g, "%2A").replace(/\'/g, "%27").replace(/\(/g, "%28").replace(/\)/g, "%29");
}

डिकोडिंग URL के लिए:

function decodeData(s:String):String{
    try{
        return decodeURIComponent(s.replace(/\%2D/g, "-").replace(/\%5F/g, "_").replace(/\%2E/g, ".").replace(/\%21/g, "!").replace(/\%7E/g, "~").replace(/\%2A/g, "*").replace(/\%27/g, "'").replace(/\%28/g, "(").replace(/\%29/g, ")"));
    }catch (e:Error) {
    }
    return "";
}

5
यह # (पाउंड / हैश / नंबर) साइन भी नहीं करता है, जो% 23 है।
xr280xr

1
@ xr280xr आपका क्या मतलब है? एनकोडरिकम्पोनेंट # 23% तक एनकोड करता है (शायद 2014 में ऐसा नहीं हुआ?)
डेविड बालूसिक

38

एनकोडेरी () - एस्केप () फ़ंक्शन जावास्क्रिप्ट एस्केपिंग के लिए है, न कि HTTP।


अगर मेरे पास इस तरह का एक यूआरएल है: var url = "http://kuler-api.adobe.com/rss/get.cfm?startIndex=0&itemsPerPage=20&timeSpan=0&listType=rating"... और मैं इसे इस तरह से Google अजाक्स एपीआई के माध्यम से एक्सेस करना चाहता हूं: var gurl = "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&callback=?&q=" + url;... तो मुझे इसका उपयोग करना होगा escape(url)encodeURI(url)लगता है जैसे मापदंडों के साथ काम नहीं करता है।
लांस पोलार्ड

15
यू को इकोनॉड्यूरिकम्पोनेंट (url)
उस्तामन संगट

2
सभी 3 कार्यों में उनके मुद्दे हैं। अपना खुद का फ़ंक्शन बनाने के लिए बेहतर है जो काम करता है।
जेरी जोसेफ

17

छोटी तुलना तालिका जावा बनाम जावास्क्रिप्ट बनाम PHP।

1. Java URLEncoder.encode (using UTF8 charset)
2. JavaScript encodeURIComponent
3. JavaScript escape
4. PHP urlencode
5. PHP rawurlencode

char   JAVA JavaScript --PHP---
[ ]     +    %20  %20  +    %20
[!]     %21  !    %21  %21  %21
[*]     *    *    *    %2A  %2A
[']     %27  '    %27  %27  %27 
[(]     %28  (    %28  %28  %28
[)]     %29  )    %29  %29  %29
[;]     %3B  %3B  %3B  %3B  %3B
[:]     %3A  %3A  %3A  %3A  %3A
[@]     %40  %40  @    %40  %40
[&]     %26  %26  %26  %26  %26
[=]     %3D  %3D  %3D  %3D  %3D
[+]     %2B  %2B  +    %2B  %2B
[$]     %24  %24  %24  %24  %24
[,]     %2C  %2C  %2C  %2C  %2C
[/]     %2F  %2F  /    %2F  %2F
[?]     %3F  %3F  %3F  %3F  %3F
[#]     %23  %23  %23  %23  %23
[[]     %5B  %5B  %5B  %5B  %5B
[]]     %5D  %5D  %5D  %5D  %5D
----------------------------------------
[~]     %7E  ~    %7E  %7E  ~
[-]     -    -    -    -    -
[_]     _    _    _    _    _
[%]     %25  %25  %25  %25  %25
[\]     %5C  %5C  %5C  %5C  %5C
----------------------------------------
char  -JAVA-  --JavaScript--  -----PHP------
[ä]   %C3%A4  %C3%A4  %E4     %C3%A4  %C3%A4
[ф]   %D1%84  %D1%84  %u0444  %D1%84  %D1%84

12

मैं उन तरीकों में से किसी एक का उपयोग न करने की सलाह देता हूं। अपना खुद का फ़ंक्शन लिखें जो सही काम करता है।

एमडीएन ने नीचे दिखाए गए यूआरएल एन्कोडिंग पर एक अच्छा उदाहरण दिया है।

var fileName = 'my file(2).txt';
var header = "Content-Disposition: attachment; filename*=UTF-8''" + encodeRFC5987ValueChars(fileName);

console.log(header); 
// logs "Content-Disposition: attachment; filename*=UTF-8''my%20file%282%29.txt"


function encodeRFC5987ValueChars (str) {
    return encodeURIComponent(str).
        // Note that although RFC3986 reserves "!", RFC5987 does not,
        // so we do not need to escape it
        replace(/['()]/g, escape). // i.e., %27 %28 %29
        replace(/\*/g, '%2A').
            // The following are not required for percent-encoding per RFC5987, 
            //  so we can allow for a little better readability over the wire: |`^
            replace(/%(?:7C|60|5E)/g, unescape);
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent


1
क्या एक महान जवाब (अगर कोई गलती नहीं करते हुए क्रोम एज और फ़ायरफ़ॉक्स पर इसकी संगत है)
यान बेलवेंस

10

यह भी याद रखें कि वे सभी वर्णों के अलग-अलग सेटों को एनकोड करते हैं, और आपको जिसको उचित रूप से ज़रूरत है उसका चयन करें। encodeURI () encodeURIComponent () की तुलना में कम वर्णों को एनकोड करता है, जो भागने की तुलना में कम (और dannyp के बिंदु तक) वर्णों को एन्कोड करता है ()।


8

जावास्क्रिप्ट को एन्कोडिंग के उद्देश्य से तीन इनबिल्ट फ़ंक्शंस दिए गए हैं -

  1. escape()- सांकेतिक शब्दों में बदलना नहीं है @*/+ यह विधि ECMA 3 के बाद पदावनत है, इसलिए इसे टाला जाना चाहिए।

  2. encodeURI()- सांकेतिक शब्दों में बदलना नहीं है ~!@#$&*()=:/,;?+' यह मानता है कि यूआरआई एक पूर्ण यूआरआई है, इसलिए आरक्षित वर्णों को सांकेतिक शब्दों में बदलना नहीं है जिनका यूआरआई में विशेष अर्थ है। इस पद्धति का उपयोग तब किया जाता है जब आशय URL के कुछ विशेष खंड के बजाय पूर्ण URL में परिवर्तित करना होता है। उदाहरण - encodeURI('http://stackoverflow.com'); दे देंगे - http://stackoverflow.com

  3. encodeURIComponent()- - _ . ! ~ * ' ( ) एनकोड नहीं करता है यह फ़ंक्शन एक समान, दो, तीन, या चार एस्केप अनुक्रमों के प्रत्येक उदाहरण को वर्ण के UTF-8 एन्कोडिंग का प्रतिनिधित्व करते हुए एक समान संसाधन पहचानकर्ता (URI) घटक को एन्कोड करता है। इस विधि का उपयोग URL के एक घटक को परिवर्तित करने के लिए किया जाना चाहिए। उदाहरण के लिए कुछ उपयोगकर्ता इनपुट को encodeURIComponent('http://stackoverflow.com'); जोड़ने की आवश्यकता है उदाहरण - देना होगा - http% 3A% 2F% 2Fstackoverflow.com

यह सब एन्कोडिंग UTF 8 में किया जाता है अर्थात वर्णों को UTF-8 प्रारूप में परिवर्तित किया जाएगा।

encodeURIComponent उस encodeURI से भिन्न होता है जिसमें यह EncodeURI के आरक्षित वर्ण और संख्या # को सांकेतिक शब्दों में बदलता है


3

मैंने पाया है कि विभिन्न तरीकों के साथ प्रयोग करना एक अच्छा संस्कारी जाँच है, यहाँ तक कि उनके विभिन्न उपयोगों और क्षमताओं के बारे में एक अच्छा हैंडल होने के बाद भी।

उस छोर की ओर मैंने अपने संदेह की पुष्टि करने के लिए इस वेबसाइट को बेहद उपयोगी पाया है कि मैं कुछ उचित कर रहा हूं। यह एक एन्कोडर्कोम्पोनेंट'ड स्ट्रिंग को डिकोड करने के लिए भी उपयोगी साबित हुआ है जो व्याख्या करने के लिए चुनौतीपूर्ण हो सकता है। एक महान बुकमार्क करने के लिए:

http://www.the-art-of-web.com/javascript/escape/


2

स्वीकृत उत्तर अच्छा है। अंतिम भाग पर विस्तार करने के लिए:

ध्यान दें कि एनकोडरिकम्पोनेंट 'वर्ण से नहीं बचता है। एक सामान्य बग का उपयोग एचटीएमएल गुण जैसे कि href = 'MyUrl' बनाने के लिए किया जाता है, जो एक इंजेक्शन बग को पीड़ित कर सकता है। यदि आप स्ट्रिंग्स से html का निर्माण कर रहे हैं, तो या तो "के लिए 'का प्रयोग करें' विशेषता उद्धरणों के लिए, या एन्कोडिंग की एक अतिरिक्त परत जोड़ें ('% 27 के रूप में एन्कोड किया जा सकता है)।

यदि आप सुरक्षित पक्ष में रहना चाहते हैं, तो अनारक्षित वर्णों के प्रतिशत एन्कोडिंग को भी एन्कोड किया जाना चाहिए।

आप उनसे बचने के लिए इस विधि का उपयोग कर सकते हैं (स्रोत मोज़िला )

function fixedEncodeURIComponent(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}

// fixedEncodeURIComponent("'") --> "%27"

2

@ जोहान-ईचावरिया के उत्तर के आधुनिक पुनर्लेखन:

console.log(
    Array(256)
        .fill()
        .map((ignore, i) => String.fromCharCode(i))
        .filter(
            (char) =>
                encodeURI(char) !== encodeURIComponent(char)
                    ? {
                          character: char,
                          encodeURI: encodeURI(char),
                          encodeURIComponent: encodeURIComponent(char)
                      }
                    : false
        )
)

या यदि आप एक तालिका का उपयोग कर सकते हैं, तो (प्रीटीयर आउटपुट के लिए) के console.logसाथ बदलें console.table


2

जोहान की तालिका से प्रेरित होकर , मैंने तालिका का विस्तार करने का निर्णय लिया है। मैं यह देखना चाहता था कि कौन से ASCII के अक्षर एन्कोडेड हैं।

कंसोल का स्क्रीन

तालिका केवल एन्कोड किए गए वर्ण दिखाती है। खाली कोशिकाओं का मतलब है कि मूल और एन्कोडेड वर्ण समान हैं।


बस अतिरिक्त होने के लिए, मैं urlencode()बनाम के लिए एक और तालिका जोड़ रहा हूं rawurlencode()। अंतर केवल अंतरिक्ष चरित्र के एन्कोडिंग के लिए लगता है।

कंसोल का स्क्रीन

<script>
<?php
$ascii = str_split(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~", 1);
$encoded = [];
foreach ($ascii as $char) {
    $obj = ["char" => $char];
    if ($char != urlencode($char))
        $obj["urlencode"] = urlencode($char);
    if ($char != rawurlencode($char))
        $obj["rawurlencode"] = rawurlencode($char);
    if (isset($obj["rawurlencode"]) || isset($obj["rawurlencode"]))
        $encoded[] = $obj;
}
echo "var encoded = " . json_encode($encoded) . ";";
?>
console.table(encoded);
</script>

1

मेरा यह कार्य है ...

var escapeURIparam = function(url) {
    if (encodeURIComponent) url = encodeURIComponent(url);
    else if (encodeURI) url = encodeURI(url);
    else url = escape(url);
    url = url.replace(/\+/g, '%2B'); // Force the replacement of "+"
    return url;
};

4
@ChristianVielma से बचना () पदावनत है लेकिन कभी भी w3schools.com देखें। देखें w3fools.com
जेरी जोसफ

4
@Christian Vielma - कुछ खोजने के संदर्भ सामग्री पर W3Schools होने के लिए कम विवादास्पद और उपयोगी । हर कोई इस बात से सहमत नहीं है कि W3Schools को कभी भी संदर्भित नहीं किया जाना चाहिए।
डेविड आरआर

2
W3Schools को एक बुरा रैप मिलता है। यकीन है कि वे हमेशा सटीक नहीं होते हैं, लेकिन फिर मैं कई ब्लॉग पोस्ट पर आया हूं जो बिल्कुल गलत भी है। मेरे लिए कभी-कभी यह एक महान प्रारंभिक बिंदु है जो केवल कुछ शब्दावली सीखने के लिए है और फिर मैं अन्य संसाधनों के साथ थोड़ा गहरा गोता लगाता हूं। सबसे महत्वपूर्ण यह है कि इस तरह के सामान के लिए एक एकल संसाधन कभी भी बाइबिल नहीं होना चाहिए।
रयानडेल

ऐसा लगता है कि @molokoloco ने इस फ़ंक्शन को उन संस्करणों पर एक वापसी के रूप में लिखा है जहां encodeURIमौजूद नहीं है लेकिन escapeमौजूद है।
SOFe
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.