কখন আপনার এনকোডুরি / এনকোডিউআরআইকিউম্পোন্টের পরিবর্তে এস্কেপ ব্যবহার করার কথা?


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সাধারণত প্রতিটি মূল মান জোড়ার (প্রতিটিটির পরে অংশ =) কেবলমাত্র মানটিতে পৃথকভাবে প্রয়োগ করা হয় ।
টিমোথি শিল্ডস 20

3
আপনি কি চাবি কিছু করতে হবে? যদি এতে একটি = থাকে তবে কী হবে? (এটি কি সম্ভব?)
মালা

3
@ মালা আমি সাধারণভাবে ওয়েব প্রোগ্রামিংয়ে এখনও নতুন, তবে আমি আমার সীমিত অভিজ্ঞতায় কী এবং মানটি পৃথকভাবে এনকোড করা, '=' স্থির করে রাখার বিষয়টি নিশ্চিত করে: var params = encodeURIComponent(key) + '=' + encodeURIComponent(value);- অন্য কেউ হয়তো আরও ভাল উপায় জানেন।
নেডশেয়ারস

1
@nedshares আমি এটি নিয়ে খেলছিলাম, তবে যতদূর আমি কী বলতে পারি তা এনকোডযুক্ত বলে মনে হচ্ছে না ... কমপক্ষে একইভাবে নয়। চাবিতে একটি = থাকা অনুমানের বিরুদ্ধে?
মালা

1
এটি উল্লেখ করার মতো যে সাম্প্রতিক জাভাস্ক্রিপ্ট বাস্তবায়নগুলি ইউআরএলগুলি এবং তাদের ক্যোয়ারী স্ট্রিংগুলি পরিচালনা করার জন্য উচ্চ-স্তরের ইন্টারফেসগুলি ইউআরএল এবং ইউআরএলসন্ধানপ্যারাম সরবরাহ করে।
বার্ট রবিনসন

উত্তর:


1914

অব্যাহতি ()

এটি ব্যবহার করবেন না! escape()বিভাগ বি .২.২.২ এস্কে সংজ্ঞায়িত করা হয়েছে এবং এনেক্স বি এর ভূমিকা পাঠ্য বলেছেন:

... এই সংযুক্তিতে বর্ণিত সমস্ত ভাষা বৈশিষ্ট্য এবং আচরণগুলির এক বা একাধিক অযাচিত বৈশিষ্ট্য রয়েছে এবং উত্তরাধিকারের অনুপস্থিতিতে এই স্পেসিফিকেশন থেকে সরানো হবে। ...
... প্রোগ্রামারদের নতুন ECMAScript কোড লেখার সময় এই বৈশিষ্ট্যগুলি এবং আচরণগুলির অস্তিত্ব ব্যবহার বা অনুমান করা উচিত নয় ....

আচরণ:

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

বিশেষ অক্ষরগুলি ব্যতীত এনকোড করা হয়েছে: @ * _ + -। /

অক্ষর, যার কোড ইউনিট মান 0xFF বা কম জন্য হেক্সাডেসিমেল ফর্ম, একটি দুই অঙ্ক পালাবার ক্রম: %xx

বৃহত্তর কোড ইউনিট সহ অক্ষরের জন্য, চার-অঙ্কের ফর্ম্যাট %uxxxxব্যবহার করা হয়। এটি একটি ক্যোয়ারী স্ট্রিংয়ের মধ্যে অনুমোদিত নয় ( আরএফসি 3986 হিসাবে সংজ্ঞায়িত ):

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

শতাংশের চিহ্ন কেবল তখনই অনুমোদিত হয় যদি এটি সরাসরি দুটি হেক্সডিজিট দ্বারা অনুসরণ করা হয়, শতাংশ অনুসরণ করার uঅনুমতি নেই।

encodeURI ()

যখন আপনি একটি কাজের URL চান তখন এনকোডুরি ব্যবহার করুন। এই কল করুন:

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

পেতে:

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

এনকোডেরিকোনমিকটিকে কল করবেন না কারণ এটি ইউআরএল ধ্বংস করে ফিরে আসবে destroy

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

encodeURIComponent ()

আপনি যখন কোনও ইউআরএল প্যারামিটারের মান এনকোড করতে চান তখন এনকোডিউআরআইকিউম্পোন্ট ব্যবহার করুন।

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

তারপরে আপনি আপনার প্রয়োজন URL টি তৈরি করতে পারেন:

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

এবং আপনি এই সম্পূর্ণ ইউআরএল পাবেন:

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

নোট করুন যে এনকোডিউআরআইসি কম্পোনেন্ট 'অক্ষরটি থেকে রেহাই পায় না । একটি সাধারণ বাগ হ'ল এইচটিএমএল বৈশিষ্ট্য তৈরি করতে এটি ব্যবহার করা হয় href='MyUrl'যা কোনও ইঞ্জেকশন বাগটি ভোগ করতে পারে। যদি আপনি স্ট্রিং থেকে এইচটিএমএল "তৈরি করে 'থাকেন তবে হয় অ্যাট্রিবিউট কোটের পরিবর্তে ব্যবহার করুন, বা এনকোডিংয়ের একটি অতিরিক্ত স্তর যুক্ত করুন ( '% 27 হিসাবে এনকোড করা যেতে পারে)।

এই ধরণের এনকোডিং সম্পর্কিত আরও তথ্যের জন্য আপনি চেক করতে পারেন: http://en.wikedia.org/wiki/Percent-encoding


31
@ ফ্র্যাঙ্কোইস, প্রাপ্তি হওয়া সার্ভারের উপর নির্ভর করে, এসকিপি কীভাবে উচ্চতর ASCII বা নন-ASCII অক্ষরগুলিকে এনকোড করে তা সঠিকভাবে ডিকোড করতে পারে না: example উদাহরণস্বরূপ, পাইথনের ফিল্ডস্টোরেজ শ্রেণি উপরোক্ত স্ট্রিংটি সঠিকভাবে ডিকোড করবে না যদি এনকোড করা বাই এস্কেপ থাকে।
রায় 22

22
@ ফ্র্যাঙ্কোইস এস্কেপ () চিঠি, সংখ্যা এবং *@-_+./ ব্যতীত নিম্নে 128 এএসসিআইআই অক্ষর এনকোড করে, যখন আনস্কেপ () পালানোর বিপরীত ()। আমি যতদূর বলতে পারি, তারা ইউআরএল এনকোডিংয়ের জন্য পরিকল্পিত লিগ্যাসি ফাংশন এবং কেবল পিছনের সামঞ্জস্যের জন্য এখনও প্রয়োগ করা হয়। সাধারণত, তাদের জন্য ডিজাইন করা কোনও অ্যাপ / ওয়েব পরিষেবা / ইত্যাদির সাথে ইন্টারঅ্যাক্ট না করা ছাড়া এগুলি ব্যবহার করা উচিত নয়।
অ্যান্টনি দি সান্তি

3
অবশ্যই আপনি কোনও ইউআরআই উপাদান হিসাবে কোনও ইউআরএল পাস করার চেষ্টা করছেন যা ক্ষেত্রে এনকোডিউআরআইকিউম্পোন্ট কল করুন।
টম

4
কেন এটি একক উদ্ধৃতি পরিচালনা করে না?
এরিক

11
@ এরিক এটি সিঙ্গল-কোট এনকোড করে না, কারণ সিআর-কোট একটি ইউআরআই ( আরএফসি -৯৯86 )) এর মধ্যে উপস্থিত হতে সম্পূর্ণ বৈধ চরিত্র । সমস্যা দেখা দেয় যখন আপনি HTML, যেখানে একক উদ্ধৃতি মধ্যে একটি কোনো URI এম্বেড না বৈধ অক্ষর। তখনই অনুসরণ করে, URI উল্লিখিত এছাড়াও হওয়া উচিত যে, "এইচটিএমএল এনকোডেড" (যা প্রতিস্থাপন করবে 'সঙ্গে 'একটি HTML ডকুমেন্ট মধ্যে স্থাপন করা হচ্ছে আগে)।
লি

441

encodeURI()এবং encodeURIComponent()এর মধ্যে পার্থক্য হ'ল 11 টি অক্ষর এনকোডিউআরআইকিউম্পোনেন্ট দ্বারা এনকোড করা হয়েছে তবে এনকোডুরি দ্বারা নয়:

এনকোডুরি এবং এনকোডেরিক উপাদানগুলির মধ্যে দশটি পার্থক্য সহ সারণী

আমি এই কোডটি সহ গুগল ক্রোমে কনসোল.সামান্য দিয়ে সহজেই এই টেবিলটি তৈরি করেছি :

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);


এই ব্রাউজারটি কি নির্ভরশীল নয়?
পেসারিয়ার

4
@ ব্লাডম্যানম্যান এনকোডিউরি এবং এনকোডিউরিকম্পোনমেন্টের সমস্ত বড় ব্রাউজারে এইভাবে কাজ করা উচিত। আপনি ক্রোম এবং ফায়ারফক্সে উপরের কোডটি উভয় সমর্থন কনসোল.ট্যাবল হিসাবে পরীক্ষা করতে পারেন। অন্যান্য ব্রাউজারগুলিতে (ফায়ারফক্স এবং ক্রোম সহ) আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন: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
আমি @ পেসারিয়ার অর্থ :)
জোহান এছাভারিয়া

মূল স্পেসটি খুব অস্পষ্ট না হলে @ পেসারিয়রটি বিভিন্ন ব্রাউজারগুলিতে অভিন্ন হওয়া উচিত ... এছাড়াও স্ট্যাকওভারফ্লো / প্রশ্নগুলি দেখুন / ৪৪০75৫৯৯/২
ক্রিস্টোফ Roussy

2
আমি এই বিভিন্ন সময় পছন্দ করতে হবে! দুর্ভাগ্যক্রমে শুধুমাত্র একবার upvote করতে পারেন।
রমজান পোলাট

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
@ ক্রিসটফ এগুলি আমার কাছে যুক্তিযুক্ত বলে মনে হচ্ছে। বিশেষত, আমি তাঁর সাথে একমত হয়েছি যা দেখে encodeURIমনে হয় এটি কেবল অস্পষ্ট প্রান্তের ক্ষেত্রে কার্যকর এবং সত্যই এর অস্তিত্বের প্রয়োজন নেই। তাঁর সাথে আমার কিছু মতামত রয়েছে, তবে আমি সেখানে সম্পূর্ণ মিথ্যা বা বোকামি দেখছি না। আপনি কি আজেবাজে ঠিক মনে করেন?
মার্ক আমেরিকা

1
enctypeএর অ্যাট্রিবিউট FORMউপাদান নির্দিষ্ট করে বিষয়বস্তুর প্রকার সার্ভারের সাথে জমা দেওয়ার জন্য ফর্ম তথ্য সেট এনকোড করতেন। অ্যাপ্লিকেশন / x-www-form-urlencoded এটি ডিফল্ট সামগ্রীর ধরণ। এই বিষয়বস্তুর প্রকারের সাথে জমা দেওয়া ফর্মগুলি অবশ্যই নীচে এনকোড করা উচিত: [...] স্পেস অক্ষরগুলি `` + 'দ্বারা প্রতিস্থাপন করা হবে, এবং [...] অ-অক্ষরীয় অক্ষরগুলি `% এইচএইচ' দ্বারা প্রতিস্থাপিত হবে, [...] রেফ: HTML4
সাইচোই

2
এনকোডিউআরআইকিউম্পোন্ট ('এ + বি') প্রতিস্থাপন করুন (/ \% 20 / জি, '+') + '\ n' + ডিকোডেরিউরিওকম্পোনেন্ট ("এ +% 2 বি + বি" .replaces (/ \ + / জি, '% 20' ));
জ্লাটিন জ্লেটেভ

39

এনকোডিউআরআইকিউম্পোন্ট এনকোড করে না -_.!~*'(), এক্সএমএল স্ট্রিংয়ে পিএইচপি থেকে ডেটা পোস্ট করতে সমস্যা সৃষ্টি করে।

উদাহরণ স্বরূপ:
<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

আপনি দেখতে পারেন, একক উদ্ধৃতি এনকোড করা হয়নি। সমস্যা সমাধানের জন্য আমি এনকোডিং ইউআরএল জন্য আমার প্রকল্পে সমস্যা সমাধানের জন্য দুটি ফাংশন তৈরি করেছি:

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 নয় TP


আমার যদি এর মতো ইউআরএল থাকে: var url = "http://kuler-api.adobe.com/rss/get.cfm?startIndex=0&itemsPerPage=20&timeSpan=0&listType=rating"... এবং আমি এটির মতো গুগল অ্যাজাক্স এপিআইয়ের মাধ্যমে এটি অ্যাক্সেস করতে চাই: var gurl = "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&callback=?&q=" + url;... তবে আমাকে ব্যবহার করতে হবে escape(url)encodeURI(url)মনে হচ্ছে এমন পরামিতিগুলির সাথে কাজ করে না।
ল্যান্স পোলার্ড

15
আপনার একনোডিউআরআইসি কম্পোনেন্ট (ইউআরএল) ব্যবহার করা উচিত
উস্তামান সংগীত

2
3 টি কার্যক্রমে তাদের সমস্যা রয়েছে। আপনার নিজের ফাংশনটি তৈরি করা ভাল যা কাজটি করে।
জেরি জোসেফ

17

ছোট তুলনা টেবিল জাভা বনাম জাভাস্ক্রিপ্ট বনাম পিএইচপি।

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

আমি সেই পদ্ধতিগুলির মধ্যে একটি ব্যবহার না করার পরামর্শ দিচ্ছি। আপনার নিজের ফাংশনটি লিখুন যা সঠিক কাজ করে।

MDN নীচে প্রদর্শিত url এনকোডিংয়ের জন্য একটি ভাল উদাহরণ দিয়েছে।

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

এও মনে রাখবেন যে এগুলি সমস্ত চরিত্রের বিভিন্ন সেটকে এনকোড করে এবং আপনার যথাযথভাবে প্রয়োজনীয় একটি নির্বাচন করুন। এনকোডুরি () এনকোডিউআরআইকিউম্পোনেন্ট () এর চেয়ে কম অক্ষরকে এনকোড করে, যা এস্কেপ () এর চেয়ে কম অক্ষর (এবং আলাদাও, ড্যানিপ এর বিন্দুতে) অক্ষরকে এনকোড করে।


8

জাভাস্ক্রিপ্ট এনকোডিংয়ের উদ্দেশ্যে তিনটি ইনবিল্ট ফাংশন দেওয়া হয়েছে -

  1. escape()- এনকোড দেয় না @*/+ এই পদ্ধতিটি ইসিএমএ 3 এর পরে অবচিত করা হয়েছে তাই এটি এড়ানো উচিত।

  2. encodeURI()- এনকোড দেয় না ~!@#$&*()=:/,;?+' এটি ধরে নেয় যে ইউআরআই একটি সম্পূর্ণ ইউআরআই, তাই ইউআরআই-এর বিশেষ অর্থ রয়েছে এমন সংরক্ষিত অক্ষরগুলি এনকোড করে না। এই উদ্দেশ্যটি যখন ব্যবহার করা হয় তখন ইউআরএলের কিছু বিশেষ বিভাগের পরিবর্তে সম্পূর্ণ ইউআরএল রূপান্তর করতে হয়। উদাহরণ - encodeURI('http://stackoverflow.com'); দেবে - http://stackoverflow.com

  3. encodeURIComponent()- এনকোড হয় না - _ . ! ~ * ' ( ) এই ফাংশনটি অক্ষরের প্রতিটি উদাহরণকে এক, দুই, তিন বা চারটি পালানোর ক্রমিক দ্বারা অক্ষরের ইউটিএফ -8 এনকোডিং উপস্থাপন করে একটি ইউনিফর্ম রিসোর্স আইডেন্টিফায়ার (ইউআরআই) উপাদানকে এনকোড করে। এই পদ্ধতিটি ইউআরএলের কোনও উপাদানকে রূপান্তর করতে ব্যবহার করা উচিত। উদাহরণস্বরূপ কিছু ব্যবহারকারীর ইনপুট সংযোজন করা দরকার উদাহরণ - দেওয়া encodeURIComponent('http://stackoverflow.com'); হবে - http% 3A% 2F% 2Fstackoverflow.com

এই সমস্ত এনকোডিংটি ইউটিএফ 8-তে সঞ্চালিত হয়েছে অর্থাৎ অক্ষরগুলি ইউটিএফ -8 ফর্ম্যাটে রূপান্তরিত হবে।

এনকোডিউআরআইকিউম্পোনমেন্টটি এনকোডুরির থেকে পৃথক যে এটি সংরক্ষিত অক্ষর এবং এনকোডুরির নম্বর সাইন # এনকোড করে


3

আমি দেখতে পেয়েছি যে বিভিন্ন পদ্ধতির সাথে পরীক্ষা করা তাদের বিভিন্ন ব্যবহার এবং ক্ষমতাগুলি কী তা সম্পর্কে ভাল হ্যান্ডেল থাকার পরেও একটি ভাল বিচক্ষণতা পরীক্ষা।

সেই দিকে আমি এই ওয়েবসাইটটি আমার সন্দেহের বিষয়টি নিশ্চিত করতে অত্যন্ত দরকারী যে আমি উপযুক্তভাবে কিছু করছি। এটি এনকোডিউআরআইকিউম্পোনেন্ট যুক্ত স্ট্রিং ডিকোডিংয়ের জন্যও কার্যকর প্রমাণিত হয়েছে যা ব্যাখ্যা করা বরং চ্যালেঞ্জিং হতে পারে। একটি দুর্দান্ত বুকমার্ক আছে:

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


2

গৃহীত উত্তর ভাল। শেষ অংশটি প্রসারিত করতে:

নোট করুন যে এনকোডিউআরআইসি কম্পোনেন্ট 'অক্ষরটি থেকে রেহাই পায় না। একটি সাধারণ বাগ হ'ল href = 'MyUrl' এর মতো এইচটিএমএল বৈশিষ্ট্য তৈরি করতে এটি ব্যবহার করা হয় যা ইনজেকশন বাগটি ভুগতে পারে। যদি আপনি স্ট্রিং থেকে এইচটিএমএল তৈরি করে থাকেন তবে হয় গুণাবলীর উক্তিগুলির জন্য "এর পরিবর্তে" ব্যবহার করুন বা এনকোডিংয়ের একটি অতিরিক্ত স্তর যুক্ত করুন ('% 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

জোহানের টেবিলে অনুপ্রাণিত হয়ে , আমি টেবিলটি প্রসারিত করার সিদ্ধান্ত নিয়েছি। আমি দেখতে চেয়েছিলাম কোন এএসসিআইআই অক্ষর এনকোড হয়েছে।

কনসোল.ট্যাবলের স্ক্রিনশট

সারণীটি কেবল এনকোডযুক্ত অক্ষরগুলি দেখায়। খালি কোষের অর্থ আসল এবং এনকোড করা অক্ষরগুলি একই।


কেবল অতিরিক্ত হতে, আমি 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
@ ক্রিশ্চিয়ানভিয়েলমা পলায়ন () অবমূল্যায়ন করা হয়েছে তবে কখনও ডাব্লু 3 স্কুল স্কুল ডটকমকে উল্লেখ করেন না। w3fools.com দেখুন
জেরি জোসেফ

4
@Christian Vielma - কিছু খুঁজে রেফারেন্স উপাদানW3Schools হতে কম বিতর্কিত এবং দরকারী । সকলেই একমত নন যে ডাব্লু 3 স্কুলগুলি কখনই রেফারেন্স করা উচিত নয়।
ডেভিডআরআর

2
ডাব্লু 3 স্কুলগুলি খারাপ রেপ পায়। নিশ্চিত যে এগুলি সর্বদা সঠিক নয়, তবে তারপরে আবার আমি অনেকগুলি ব্লগ পোস্ট এসেছি যা সম্পূর্ণ ভুলও। আমার জন্য এটি মাঝে মাঝে একটি দুর্দান্ত শুরুর পয়েন্ট মাত্র কিছু পরিভাষা শিখতে এবং তারপরে আমি অন্যান্য সংস্থানগুলির সাথে আরও গভীরভাবে ডুব দিয়েছি। সর্বাধিক গুরুত্বপূর্ণটি হ'ল যখন এই ধরণের স্টাফ আসে তখন একটি একক সংস্থান কখনও বাইবেলে লেখা উচিত নয়।
ryandlf

দেখে মনে হচ্ছে @ মোমোকলোকো এই ফাংশনটি এমন সংস্করণগুলির ফ্যালব্যাক হিসাবে লিখেছেন যেখানে encodeURIঅস্তিত্ব নেই তবে escapeবিদ্যমান রয়েছে।
সফটওয়্যার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.