ඔබ encodeURI / encodeURIComponent වෙනුවට ගැලවීම භාවිතා කළ යුත්තේ කවදාද?


1398

වෙබ් සේවාදායකයකට යැවිය යුතු විමසුම් නූලක් කේතනය කිරීමේදී - ඔබ භාවිතා escape()කරන්නේ කවදාද සහ කවදාද භාවිතා කරන්නේ encodeURI()හෝ encodeURIComponent():

පැන යාම භාවිතා කරන්න:

escape("% +&=");

හෝ

encodeURI () / encodeURIComponent () භාවිතා කරන්න

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

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

113
එය වටිනා බව පෙන්වා දෙමින් encodeURIComponent("var1=value1&var2=value2")නොවන සාමාන්ය භාවිතය නඩුව. ඒ උදාහරණය කේතාංකනය ඇත =හා &අදහස් කරන ලදී දේ බොහෝ විට නො වන,! encodeURIComponentසාමාන්‍යයෙන් එක් එක් යතුරු අගය යුගලයේ අගයට වෙන වෙනම යොදනු ලැබේ (එක් එක් පසු කොටස =).
තිමෝති ෂීල්ඩ්ස්

3
ඔබට යතුරට කිසිවක් කිරීමට අවශ්‍යද? එහි = = තිබේ නම් කුමක් කළ යුතුද? (එය පවා කළ හැකිද?)
මාලා

3
Ala මාලා මම තවමත් පොදුවේ වෙබ් වැඩසටහන්කරණයට අලුත් ය, නමුත් මගේ සීමිත අත්දැකීම් තුළ මම භාවිතා කර ඇත්තේ යතුර සහ වටිනාකම වෙන වෙනම කේතනය කිරීම, '=' රැඳී සිටීම සහතික කිරීම: var params = encodeURIComponent(key) + '=' + encodeURIComponent(value);- සමහර විට වෙනත් අයෙකු වඩා හොඳ ක්‍රමයක් දනී.
nedshares

1
@nedshares මම ඒ සමඟ සෙල්ලම් කරමින් සිටියෙමි, නමුත් මට පැවසිය හැකි තාක් දුරට යතුර කේතනය කර ඇති බවක් නොපෙනේ ... අවම වශයෙන් එකම ආකාරයකින් නොවේ. සමහර විට යතුර තුළ = තිබීම පිරිවිතරයට විරුද්ධද?
මාලා

1
මෑත කාලීන ජාවාස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීම් මඟින් URL සහ ඒවායේ විමසුම් නූල් හැසිරවීම සඳහා ඉහළ මට්ටමේ අතුරුමුහුණත් URL සහ URLSearchParams සපයන බව පෙන්වා දීම වටී .
බාර්ට් රොබින්සන්

Answers:


1916

පැන යාම ()

එය භාවිතා නොකරන්න! පැන යාම B.2.1.2escape() කොටසේ අර්ථ දක්වා ඇති අතර ඇමුණුම B හි හඳුන්වාදීමේ පා says ය මෙසේ කියයි:

... මෙම ඇමුණුමේ දක්වා ඇති සියලුම භාෂා ලක්ෂණ සහ හැසිරීම් වලට නුසුදුසු ලක්ෂණ එකක් හෝ කිහිපයක් ඇති අතර උරුම භාවිතය නොමැති විට මෙම පිරිවිතරයෙන් ඉවත් කරනු ලැබේ. ...
... නව 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 එක විනාශ කර නැවත පැමිණේ

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

EnodeURIComponent අක්ෂරයෙන් ගැලවී නොයන බව සලකන්න '. පොදු දෝෂයක් නම් href='MyUrl', එන්නත් දෝෂයකට ගොදුරු විය හැකි html ගුණාංග නිර්මාණය කිරීම සඳහා එය භාවිතා කිරීමයි . ඔබ නූල් වලින් html සාදන්නේ නම්, එක්කෝ ආරෝපණ උපුටා දැක්වීම් "වෙනුවට භාවිතා 'කරන්න, නැතහොත් අමතර කේතීකරණ තට්ටුවක් එක් කරන්න ( '% 27 ලෙස කේතනය කළ හැකිය).

මෙම වර්ගයේ කේතන ක්‍රම පිළිබඳ වැඩි විස්තර සඳහා ඔබට පරීක්ෂා කළ හැකිය: http://en.wikipedia.org/wiki/Percent-encoding


31
Ran ෆ්‍රැන්කොයිස්, ලැබීමේ සේවාදායකය මත පදනම්ව, ඉහළ ASCII හෝ ASCII නොවන අක්ෂර වලින් ගැලවීම සංකේතවත් කරන්නේ කෙසේද යන්න නිසියාකාරව විකේතනය නොකරයි: example නිදසුනක් ලෙස, පයිතන්ගේ ෆීල්ඩ්ස්ටෝරේජ් පන්තිය ඉහත කේතය නිසි ලෙස විකේතනය නොකරන්නේ නම්, පැන යාමෙන් සංකේතවත් වේ.
රේ

22
Ran ෆ්‍රැන්කොයිස් පැන යාම () අකුරු, ඉලක්කම් සහ *@-_+./ හැර සෙසු ASCII අක්ෂර 128 සංකේතවත් කරන අතර අනාරක්ෂිත () යනු ගැලවීමේ ප්‍රතිලෝමය () වේ. මට කිව හැකි තාක් දුරට, ඒවා URL සංකේතනය කිරීම සඳහා නිර්මාණය කර ඇති පැරණි කාර්යයන් වන අතර ඒවා තවමත් ක්‍රියාත්මක වන්නේ පසුගාමී අනුකූලතාව සඳහා පමණි. සාමාන්‍යයෙන්, ඔවුන් සඳහා නිර්මාණය කර ඇති යෙදුමක් / වෙබ් සේවාවක් / යනාදිය සමඟ අන්තර්ක්‍රියා නොකරන්නේ නම් ඒවා භාවිතා නොකළ යුතුය.
ඇන්තනි ඩිසන්ති

3
ඇත්ත වශයෙන්ම ඔබ යූආර්අයි සංරචකයක් ලෙස යූආර්එල් එකක් යැවීමට උත්සාහ කරන විට එන්කෝඩියුරිකොම්පොනන්ට් අමතන්න.
ටොම්

4
එය තනි උපුටා දැක්වීමක් නොකරන්නේ ඇයි?
එරික්

11
Ric එරික් එය තනි-උපුටා දැක්වීමක් සංකේතවත් නොකරයි, මන්ද තනි-උපුටා දැක්වීම යූආර්අයි ( RFC-3986 ) තුළ සිදුවිය හැකි සම්පූර්ණයෙන්ම වලංගු චරිතයකි . තනි උද්ධෘත වලංගු අක්ෂරයක් නොවන HTML තුළ ඔබ යූආර්අයි කාවැද්දූ විට ගැටළුව ඇතිවේ . HTML ලේඛනයකට ඇතුළත් කිරීමට පෙර යූආර්අයි "HTML- කේතනය" කළ යුතු අතර (එය ප්‍රතිස්ථාපනය වනු 'ඇත ').
ලී

447

වෙනස අතර encodeURI()හා encodeURIComponent()හරියටම චරිත 11 encodeURIComponent විසින් නමුත් encodeURI මගින් සංකේතවත් වේ:

EnodeURI සහ encodeURIComponent අතර වෙනස්කම් දහයක් සහිත වගුව

මෙම කේතය සමඟ ගූගල් ක්‍රෝම් හි console.table සමඟ මම පහසුවෙන් මෙම වගුව ජනනය කළෙමි :

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
මම අදහස් කළේ ac පැකේරියර් :)
ජොහාන් එචාවාරියා

Spec මුල් පිරිවිතර අපැහැදිලි නම් මිස විවිධ බ්‍රව්සර් වල පැසීරියර් සමාන විය යුතුය ... එසේම stackoverflow.com/questions/4407599/…
ක්‍රිස්ටෝෆ් රූසි

3
මට මෙම කාල වකවානු වැඩි දියුණු කිරීමට අවශ්‍ය විය! අවාසනාවට ඉහළ නැංවිය හැක්කේ එක් වරක් පමණි.
රාමසාන් පොලාට්

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
H ක්‍රිස්ටෝෆ් මේ සියල්ල මට සාධාරණයි. විශේෂයෙන්, මම ඔහු සමඟ එකඟ encodeURIවන්නේ එය තරමක් අපැහැදිලි අද්දරකදී පමණක් ප්‍රයෝජනවත් වන අතර ඇත්ත වශයෙන්ම නොපවතින බැවිනි. මට ඔහු සමඟ යම් මතභේදයක් ඇත, නමුත් එහි ව්‍යාජ හෝ මෝඩ කිසිවක් මා දකින්නේ නැත. විකාර යැයි ඔබ සිතන්නේ කුමක්ද?
මාර්ක් අමරි

1
මෙම enctypeපිළිබඳ විශේෂණය FORMඅංගයක් සේවාදායකය වෙත ඉදිරිපත් කිරීම සඳහා ආකෘති පත්රය දත්ත කට්ටලයක් කේතාංකනය කිරීම සඳහා භාවිතා කරන අන්තර්ගතයේ වර්ගය දක්වයි. application / x-www-form-urlencoded මෙය පෙරනිමි අන්තර්ගත වර්ගයයි. මෙම අන්තර්ගත වර්ගය සමඟ ඉදිරිපත් කරන ලද ආකෘති පහත පරිදි කේතනය කළ යුතුය: [...] අභ්‍යවකාශ අක්ෂර `` + 'මගින් ප්‍රතිස්ථාපනය වන අතර [...] අක්ෂරාංක නොවන අක්ෂර'% HH 'මගින් ප්‍රතිස්ථාපනය වේ, [...] Ref: HTML4 Sepc
cychoi

2
encodeURIComponent ('A + B'). වෙනුවට (/ \% 20 / g, '+') + '\ n' + decodeURIComponent ("A +% 2B + B" ));
ස්ලැටින් ස්ලැටෙව්

39

encodeURIComponent එන්කෝඩ් නොකරන -_.!~*'()අතර xml string හි 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

ඔබට පෙනේ, තනි උපුටා දැක්වීමක් කේතනය කර නොමැත. ගැටළුව විසඳීම සඳහා මගේ ව්‍යාපෘතියේ ගැටළුව විසඳීම සඳහා කාර්යයන් දෙකක් නිර්මාණය කළෙමි.

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 ඔබ අදහස් කළේ කුමක්ද? encodeURIComponent # සිට% 23 දක්වා සංකේතවත් කරයි (සමහර විට එය 2014 දී නොවේද?)
ඩේවිඩ් බාලාසික්

38

encodeURI () - පැන යාම () ශ්‍රිතය ජාවාස්ක්‍රිප්ට් ගැලවීම සඳහා මිස HTTP නොවේ.


මට මේ වගේ යූආර්එල් එකක් තිබේ නම්: 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
ඔබ භාවිතා කළ යුත්තේ ecnodeURIComponent (url)
උස්තාන් සංගාත්

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

එම ක්‍රම වලින් එකක් භාවිතා නොකිරීමට මම නිර්දේශ කරමි. නිවැරදි දේ කරන ඔබේම ශ්‍රිතයක් ලියන්න.

පහත දැක්වෙන url කේතීකරණය පිළිබඳව MDN හොඳ උදාහරණයක් ලබා දී ඇත.

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 () ට වඩා අඩු අක්ෂර සංකේතවත් කරන අතර එය පැන යාම () ට වඩා අඩු (හා වෙනස්, ඩැනයිප්ගේ ලක්ෂ්‍යයට) අක්ෂර සංකේතවත් කරයි.


9

ජාවාස්ක්‍රිප්ට් කේතනය කිරීම සඳහා අභ්‍යන්තර කාර්යයන් තුනක් ලබා දී ඇත -

  1. escape()- කේතනය නොකරයි @*/+ මෙම ක්‍රමය ECMA 3 න් පසු ඉවත් කරනු ලැබේ, එබැවින් එය වළක්වා ගත යුතුය.

  2. encodeURI()- එන්කෝඩ් නොකරයි යූආර්අයි ~!@#$&*()=:/,;?+' සම්පූර්ණ යූආර්අයි යැයි උපකල්පනය කරයි, එබැවින් යූආර්අයි හි විශේෂ අරුතක් ඇති වෙන් කළ අක්ෂර සංකේතනය නොකරයි. මෙම ක්‍රමය භාවිතා කරනුයේ කිසියම් විශේෂිත URL කාණ්ඩයක් වෙනුවට සම්පූර්ණ URL පරිවර්තනය කිරීමයි. උදාහරණය - encodeURI('http://stackoverflow.com'); ලබා දෙනු ඇත - http://stackoverflow.com

  3. encodeURIComponent()- සංකේතවත් නොකරයි - _ . ! ~ * ' ( ) මෙම ශ්‍රිතය යූටීඑෆ් -8 කේතීකරණය නිරූපණය කරන එක් එක් අක්ෂර එක්, දෙක, තුන, හෝ ගැලවීමේ අනුක්‍රමයන් මගින් ප්‍රතිස්ථාපනය කිරීමෙන් ඒකාකාර සම්පත් හඳුනාගැනීමේ (යූආර්අයි) සංරචකයක් සංකේතවත් කරයි. URL හි සංරචකයක් පරිවර්තනය කිරීම සඳහා මෙම ක්‍රමය භාවිතා කළ යුතුය. උදාහරණයක් ලෙස සමහර පරිශීලක ආදානය එකතු කළ යුතුය උදාහරණය - encodeURIComponent('http://stackoverflow.com'); ලබා දෙනු ඇත - http% 3A% 2F% 2Fstackoverflow.com

මෙම සියලු කේතන ක්‍රම යූටීඑෆ් 8 හි සිදු කෙරේ, එනම් අක්ෂර යූටීඑෆ් -8 ආකෘතියෙන් පරිවර්තනය වේ.

encodeURIComponent එන්කෝඩියුරියට වඩා වෙනස් වන්නේ එය වෙන් කළ අක්ෂර සංකේතවත් කරන අතර එන්කෝඩියුරියේ අංක ලකුණ #


3

විවිධ ක්‍රම අත්හදා බැලීම ඔවුන්ගේ විවිධ භාවිතයන් සහ හැකියාවන් පිළිබඳව හොඳින් හසුරුවීමෙන් පසුව පවා හොඳ සනීපාරක්ෂාව පරීක්ෂා කිරීමක් බව මට පෙනී ගොස් ඇත.

එය අවසන් දෙසට මා සොයාගෙන තිබෙනවා , මෙම වෙබ් මම සුදුසු යමක් කරන්නේ ඒ මගේ සැකය තහවුරු කිරීමට ඉතා ප්රයෝජනවත්. අර්ථ නිරූපණය කිරීම තරමක් අභියෝගාත්මක විය හැකි එන්කෝඩියුරිකොම්පොනන්ට් නූල් විකේතනය කිරීම සඳහා ද එය ප්‍රයෝජනවත් බව ඔප්පු වී ඇත. තිබිය යුතු විශිෂ්ට පිටු සලකුණක්:

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


2

පිළිගත් පිළිතුර හොඳයි. අවසාන කොටසෙහි දිගු කිරීම සඳහා:

EnodeURIComponent 'අක්ෂරයෙන් ගැලවී නොයන බව සලකන්න. පොදු දෝෂයක් නම්, එන්නත් දෝෂයකට ගොදුරු විය හැකි href = 'MyUrl' වැනි html ගුණාංග නිර්මාණය කිරීම සඳහා එය භාවිතා කිරීමයි. ඔබ නූල් වලින් html සාදන්නේ නම්, එක්කෝ ගුණාංග උපුටා දැක්වීම් සඳහා "වෙනුවට" භාවිතා කරන්න, නැතහොත් අමතර කේතීකරණ තට්ටුවක් එක් කරන්න ('% 27 ලෙස කේතනය කළ හැකිය).

ඔබට ආරක්ෂිත පැත්තේ සිටීමට අවශ්‍ය නම්, වෙන් නොකළ අක්‍ෂර කේතනය කිරීමද සංකේතවත් කළ යුතුය.

ඒවායින් බේරීමට ඔබට මෙම ක්‍රමය භාවිතා කළ හැකිය (මූලාශ්‍ර මොසිල්ලා )

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

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

2

විසින් ජාතිය යොහාන්ගේ මේසය , මම මේසය දීර්ඝ කිරීමට තීරණය කර ඇත. කුමන ASCII අක්ෂර කේතනය කර ඇත්දැයි බැලීමට මට අවශ්‍ය විය.

console.table හි තිර රුව

වගුවේ දැක්වෙන්නේ සංකේතාත්මක අක්ෂර පමණි. හිස් සෛල යන්නෙන් අදහස් කරන්නේ මුල් සහ කේතනය කළ අක්ෂර එක හා සමාන බවයි.


අමතර වීමට, මම urlencode()එදිරිව තවත් වගුවක් එක් කරමි rawurlencode(). එකම වෙනස අභ්‍යවකාශ අක්ෂර කේතනය කිරීම බව පෙනේ.

console.table හි තිර රුව

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

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(මනරම් ප්‍රතිදානය සඳහා).


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

5
H ක්‍රිස්ටියන් විල්මා පැන යාම () ඉවත් කර ඇති නමුත් කිසි විටෙකත් w3schools.com වෙත යොමු නොවන්න. w3fools.com බලන්න
ජෙරී ජෝශප්

5
@Christian Vielma - සමහර සොයා සඳහනක් ද්රව්ය දී W3Schools විය අඩු මතභේදාත්මක සහ ප්රයෝජනවත් . W3 පාසල් කිසි විටෙකත් යොමු නොකළ යුතු බවට සියලු දෙනා එකඟ නොවෙති.
ඩේවිඩ්ආර්

2
W3 පාසල් වලට නරක රැප් එකක් ලැබේ. ඒවා සැමවිටම නිරවද්‍ය නොවන බව සහතිකයි, නමුත් නැවතත් මට බොහෝ බ්ලොග් සටහනක් හමු වී ඇති අතර එය ද වැරදි ය. මට සමහර විට එය සමහර පාරිභාෂිතය ඉගෙන ගැනීමට හොඳ ආරම්භයක් වන අතර පසුව මම වෙනත් සම්පත් සමඟ ටිකක් ගැඹුරට කිමිදෙමි. වැදගත්ම දෙය නම්, මෙවැනි දේ සම්බන්ධයෙන් තනි සම්පතක් කිසි විටෙකත් බයිබලානුකුල නොවිය යුතුය.
ryandlf

@Mlolokoloco මෙම ශ්‍රිතය ලියා ඇත්තේ encodeURIනොපවතින නමුත් escapeපවතින අනුවාද වලට පසුබෑමක් ලෙස ය .
SOFe

1

භාවිතා කළ encodeURI()යුත්තේ කවදාද? කවදාවත්. encodeURI()වරහන් කේතන ක්‍රමයට අදාළව RFC3986 පිළිපැදීමට අපොහොසත් වේ. MDN encodeURI () ප්‍රලේඛනයෙහිfixedEncodeURI() අර්ථ දක්වා ඇති සහ වැඩිදුර විස්තර කර ඇති පරිදිභාවිතා කරන්න...

function fixedEncodeURI(str) { return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']'); }

භාවිතා කළ encodeURIComponent()යුත්තේ කවදාද? කවදාවත්. encodeURIComponent()කේතීකරණය සම්බන්ධයෙන් RFC3986 පිළිපැදීමට අපොහොසත් වේ :!'()*. MDN encodeURIComponent () ප්‍රලේඛනයෙහිfixedEncodeURIComponent() අර්ථ දක්වා ඇති සහ වැඩිදුර විස්තර කර ඇති පරිදිභාවිතා කරන්න...

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

එවිට ඔබට fixedEncodeURI()තනි URL කෑල්ලක් කේතනය කිරීමට භාවිතා කළ හැකි අතර fixedEncodeURIComponent()URL කෑලි සහ සම්බන්ධක සංකේතවත් කරයි; හෝ, සරල, fixedEncodeURI()කේතාංකනය වන්නේ නැත +@?=:#;,$&(ලෙස &හා +පොදු URL එක ක්රියාකරුවන් වේ), නමුත් fixedEncodeURIComponent()කැමැත්ත.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.