একটি URL- এ অক্ষর অনুমোদিত


190

এনেকড না করে কোনও জিইটি-র মধ্যে ব্যবহার করা যেতে পারে এমন অক্ষরের পুরো তালিকা কি কেউ জানেন? এই মুহুর্তে আমি এজেড এজেড এবং 0-9 ব্যবহার করছি ... তবে আমি সম্পূর্ণ তালিকাটি সন্ধান করছি।

চীনা, আরবি ইউআরএলগুলি আসার জন্য স্পেসিফিকেশন প্রকাশিত হয়েছে কিনা তা সম্পর্কে আমি আগ্রহী (স্পষ্টতই এটি আমার প্রশ্নের উপর প্রভাব ফেলবে)


5
কোনও ইউআরআই-তে অনুমোদিত অক্ষরগুলি হয় সংরক্ষিত !*'();:@&=+$,/?#[]বা সংরক্ষণযোগ্য নয় A-Za-z0-9_.~-(বা %শতাংশ-এনকোডিংয়ের অংশ হিসাবে একটি শতাংশ চরিত্র )
মিক্ল

1
মাইএসকিউএল এ আমি REGEXP '[^]A-Za-z0-9_.~!*''();:@&=+$,/?#[%-]+'খারাপ চরিত্রগুলির সাথে ইউআরএল স্ট্রিং সন্ধান করতে এটি ব্যবহার করি । হতে পারে এটি অন্য কারও জন্যও কার্যকর।
মিক্ল

@ মিক্ল: এই জিনিসটি খুব কমই নিয়মিত প্রকাশের মত দেখাচ্ছে looks
জেনস মন্দার

উত্তর:


181

থেকে বোঝায় যা RFC 1738 স্পেসিফিকেশন:

সুতরাং, কেবলমাত্র বর্ণমালা, বিশেষ অক্ষর " $-_.+!*'()," এবং সংরক্ষিত অক্ষরগুলি তাদের সংরক্ষিত উদ্দেশ্যে ব্যবহার করা যেতে পারে কোনও ইউআরএল-এর মধ্যে বিনা কোডে ব্যবহার করা যেতে পারে।

সম্পাদনা করুন: হিসাবে @Jukka কে Korpela সঠিকভাবে তুলে ধরে, এই জন্য RFC দ্বারা আপডেট করা হয়েছে বোঝায় যা RFC 3986 । এটি হোস্টের জন্য বৈধ অক্ষরগুলি প্রসারিত ও স্পষ্ট করেছে, দুর্ভাগ্যবশত এটি সহজে অনুলিপি করা হয় না এবং আটকানো হয় না, তবে আমি যথাসাধ্য চেষ্টা করব।

প্রথম মিলিত ক্রমে:

host        = IP-literal / IPv4address / reg-name

IP-literal  = "[" ( IPv6address / IPvFuture  ) "]"

IPvFuture   = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )

IPv6address =         6( h16 ":" ) ls32
                  /                       "::" 5( h16 ":" ) ls32
                  / [               h16 ] "::" 4( h16 ":" ) ls32
                  / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
                  / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
                  / [ *3( h16 ":" ) h16 ] "::"    h16 ":"   ls32
                  / [ *4( h16 ":" ) h16 ] "::"              ls32
                  / [ *5( h16 ":" ) h16 ] "::"              h16
                  / [ *6( h16 ":" ) h16 ] "::"

ls32        = ( h16 ":" h16 ) / IPv4address
                  ; least-significant 32 bits of address

h16         = 1*4HEXDIG 
               ; 16 bits of address represented in hexadecimal

IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet

dec-octet   = DIGIT                 ; 0-9
              / %x31-39 DIGIT         ; 10-99
              / "1" 2DIGIT            ; 100-199
              / "2" %x30-34 DIGIT     ; 200-249
              / "25" %x30-35          ; 250-255

reg-name    = *( unreserved / pct-encoded / sub-delims )

unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"     <---This seems like a practical shortcut, most closely resembling original answer

reserved    = gen-delims / sub-delims

gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"

sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

pct-encoded = "%" HEXDIG HEXDIG

5
@ টিম স্ল্যাশ একটি সংরক্ষিত চরিত্র, অতএব, যদি এটি তার সংরক্ষিত উদ্দেশ্যে (বর্ণনামূলক পথগুলি, প্রোটোকল ডিলিনেশন ...) ব্যবহার করা হয়, তবে এটির পালানোর দরকার নেই। অন্যথায়, এটা না।
মাইলস

4
জন্য RFC 1738 জেনেরিক সিনট্যাক্স নিয়ম 1998 সালে অচল ছিল
Jukka কে Korpela

3
@ মাইলস, এসটিডি 66 (= আরএফসি 3986) অন্যান্য উত্তরে উল্লিখিত হয়েছে। উত্তরের সামগ্রী সঠিক কিনা তা ভিন্ন সমস্যা; আমি মনে করি না যে উত্তরগুলির কোনওটি পুরো তালিকাটি সঠিকভাবে বর্ণনা করে।
জুক্কা কে। কোরপেলা

4
এবং আপনি A-Za-z0-9_.-~এই উত্তরের শুরুতে অনারक्षित এবং সংরক্ষিত অক্ষরের তালিকা যুক্ত করতে পারেন । !*'();:@&=+$,/?#[]এটি মানুষের জন্য সময় সাশ্রয় করতে পারে
মিক্ল

2
@ বাসজিরো আমি দুঃখিত যে আপনি এটি বিভ্রান্তিকর দেখতে পেয়েছেন, তবে পুরো উত্তরটি সহজ নয়। আপনার প্রশ্নের উত্তর হ'ল না, কারণ এটি একটি সংরক্ষিত চরিত্র হিসাবে বলা হয়েছে:reserved = gen-delims / sub-delims gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
মাইলস

42

কোনও ইউআরআই-এ অনুমোদিত অক্ষরগুলি হয় সংরক্ষিত বা সংরক্ষণযোগ্য নয় (বা শতাংশ-এনকোডিংয়ের অংশ হিসাবে শতাংশ অক্ষর)

http://en.wikipedia.org/wiki/Percent-encoding#Types_of_URI_characters

এগুলি হ'ল আরএফসি 3986 রক্ষিত অক্ষর (সেকেন্ড 2.3) পাশাপাশি সংরক্ষিত অক্ষর (সেকেন্ড 2.2) যদি তাদের বিশেষ অর্থ ধরে রাখতে হয় তবে। এবং শতাংশ-এনকোডিংয়ের অংশ হিসাবে শতাংশ শতাংশ।


7
যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে।
জেস্তেভান

লিঙ্কযুক্ত দস্তাবেজ থেকে @ জেস্তেভান উদ্ধৃতি:The characters allowed in a URI are either reserved or unreserved (or a percent character as part of a percent-encoding)
মিক্ল

26

Un 66 টি রক্ষিত অক্ষরগুলির সম্পূর্ণ তালিকাটি এখানে আরএফসি 3986 এ রয়েছে: http://tools.ietf.org/html/rfc3986#section-2.3

এটি নিম্নলিখিত রেজেক্স সেটে কোনও চরিত্র:

[A-Za-z0-9_.\-~]

2
আপনি সেগুলিও সংরক্ষিত ব্যবহার করতে পারেন।
কিওয়ার্টি

অপ্রচলিত আরএফসি 1738 তালিকাভুক্ত {}^\~এবং backtickঅনিরাপদ হিসাবে। এবং আরএফসি 3986 তালিকাভুক্ত file ফাইল সিস্টেমের কারণে অনিরাপদ হিসাবে। এর অর্থ {}^পাশাপাশি ব্যবহার করা যেতে পারে।
মিগুট্ট

সুতরাং আপনি যদি বলছেন, একটি স্ট্রিংয়ের মধ্যে ইউআরএলটির শেষ সন্ধান করুন (যা আমি), তবে উত্তরের জন্য গৃহীত উত্তরে অপ্রচলিত মানগুলি অনুসরণ করা ভাল ... আপনি যদি ইউআরএলটি যাচাই করছেন তবে আপনার উচিত এই উত্তরে অক্ষরের সেট ব্যবহার করুন ।
ashleedawg

সাবধান, আপনি এটি নিয়মিত প্রকাশের অক্ষর শ্রেণি হিসাবে লিখেছেন। -চরিত্রের বর্গের শুরুতে বা শেষ দিকে এড়াতে বা এড়াতে ভুলবেন না কারণ [.-~]46 থেকে 126
অবধি

19

আমি ইউআরএল প্যারামিটার হিসাবে আমার জার্মান কীবোর্ডের সমস্ত উপলব্ধ অক্ষরের সাথে আমার ওয়েবসাইটের (অ্যাপাচি) অনুরোধ করে এটি পরীক্ষা করেছি:

http://example.com/?^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=? `QWERTZUIOPÜ*ASDFGHJKLÖÄ\'>YXCVBNM;:_²³{[]}\|µ@€~

এগুলি এনকোড করা হয়নি:

^0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-!/()=?`*;:_{}[]\|~

পরে এনকোড করা হয়নি urlencode():

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_

পরে এনকোড করা হয়নি rawurlencode():

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~

দ্রষ্টব্য: আরএফসি 1738 এর কারণে পিএইচপি 5.3.0 rawurlencode()এনকোড করার আগে । তবে এটি আরএফসি 3986 দ্বারা প্রতিস্থাপন করা হয়েছে তাই এখন এটির ব্যবহারে নিরাপদ। তবে আমি বুঝতে পারি না কেন উদাহরণস্বরূপ কেন এনকোড করা হয়েছে কারণ সেগুলি আরএফসি 3986-তে উল্লেখ করা হয়নি।~{}rawurlencode()

আমার করা একটি অতিরিক্ত পরীক্ষা মেল পাঠ্যে স্বয়ংক্রিয়ভাবে লিঙ্ক করা সম্পর্কিত। আমি মজিলা থান্ডারবার্ড, আওল ডটকম, আউটলুক ডটকম, জিমেইল ডটকম, জিএমএক্স.ডি এবং ইয়াহু.ডি পরীক্ষা করেছি এবং তারা এই অক্ষর যুক্ত ইউআরএলকে সম্পূর্ণ লিঙ্ক করেছে:

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~+#,%&=*;:@

অবশ্যই এটি ?সংযুক্ত ছিল, তবে এটি একবার ব্যবহার করা হলে।

কিছু লোক এখন কেবল rawurlencode()চরগুলি ব্যবহার করার পরামর্শ দিবে , কিন্তু আপনি কি কখনও শুনেছেন যে এই ওয়েবসাইটগুলি খুলতে কারও সমস্যা ছিল?

অ্যাসিস্ট্রিক
http://wayback.archive.org/web/*/http://google.com

কোলন
https://en.wikedia.org/wiki/Wikiedia: সম্পর্কে

প্লাস
https://plus.google.com/+google

সাইন ইন, কোলন, কমা এবং বিস্ময়কর চিহ্ন
https: //www.google.com/maps/place/USA/@36.2218457, ...

এই কারণে এই অক্ষরগুলি সমস্যা ছাড়াই আনইনকোড করা উচিত। অবশ্যই আপনার &;মতো এনকোডিংয়ের ক্রমগুলির কারণে ব্যবহার করা উচিত নয় &amp;%সাধারণভাবে চরগুলি এনকোড করতে ব্যবহৃত হওয়ায় একই কারণটি বৈধ । এবং =যেমন এটি একটি পরামিতি নামের একটি মূল্য নির্ধারণ করে।

অবশেষে আমি বলব যে এই এনকনডেড ব্যবহার না করা ঠিক আছে:

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~!+,*:@

তবে আপনি যদি এলোমেলোভাবে উত্পাদিত ইউআরএলগুলি আশা করেন তবে আপনার ব্যবহার করা উচিত নয় .!কারণ সেগুলি একটি বাক্যটির শেষে চিহ্নিত করে এবং কিছু মেল অ্যাপ্লিকেশনগুলি ইউআরএলের শেষ চরটি স্বয়ংক্রিয়ভাবে লিঙ্ক করবে না। উদাহরণ:

Visit http://example.com/foo=bar! !

ব্যবহারিক পদ্ধতির - ভাল কাজ। আপনার সর্বশেষ তালিকাটি খুঁজছিল - +সাইনটি বিশেষত :
অলিভার

12

থেকে এখানে

সুতরাং, কেবলমাত্র বর্ণমালা, বিশেষ অক্ষর $-_.+!*'(), এবং সংরক্ষিত অক্ষরগুলি তাদের সংরক্ষিত উদ্দেশ্যে ব্যবহার করা যেতে পারে কোনও ইউআরএল-এর মধ্যে বিনা কোডে ব্যবহার করা যেতে পারে।



5

আরএফসি 3986 আপনি দুটি ইউআরআইতে ব্যবহার করতে পারেন এমন দুটি অক্ষরের সংজ্ঞা দেয়:

  • সংরক্ষিত অক্ষর ::/?#[]@!$&'()*+,;=

    সংরক্ষিত = জেন-ডিলিম / সাব-ডিলিমস

    Gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"

    সাব-ডিলিমস = "!" / "$" / "এবং" / "" "/" ("/") "/" * "/" + "/", "/"; " / "="

    সংরক্ষিত অক্ষরগুলির উদ্দেশ্য হ'ল সীমিত অক্ষরগুলির একটি সেট সরবরাহ করা যা কোনও ইউআরআইয়ের মধ্যে অন্যান্য ডেটা থেকে পৃথক। ইউআরআইগুলি যেগুলি তার সাথে সম্পর্কিত শতাংশ-এনকোডড অক্টেটের সাথে সংরক্ষিত চরিত্রের প্রতিস্থাপনের ক্ষেত্রে পৃথক নয়।

  • রক্ষিত অক্ষর :A-Za-z0-9-_.~

    অরক্ষিত = ALPHA / DIGIT / "-" / "। / "_" / "~"

    যে অক্ষরগুলি ইউআরআই-তে অনুমোদিত কিন্তু সংরক্ষিত উদ্দেশ্য না থাকে তাদের অরক্ষিত বলা হয়।


3

আসন্ন পরিবর্তনটি ইউআরআই নয়, চীনা, আরবিক ডোমেন নামগুলির জন্য। আন্তর্জাতিকীকরণিত ইউআরআইগুলিকে আইআরআই বলা হয় এবং আরএফসি 3987 - সংজ্ঞায়িত করা হয় । তবে, এটি বলেছিলেন যে আমি নিজে এটি না করে বরং একটি বিদ্যমান, পরীক্ষিত লাইব্রেরির উপর নির্ভর করার পরামর্শ দিচ্ছি যেহেতু ইউআরআই এনকোডিং / ডিকোডিংয়ের অনেক পছন্দ রয়েছে এবং যা নির্দিষ্টকরণের মাধ্যমে নিরাপদ বলে বিবেচিত হয়, বনাম প্রকৃত ব্যবহারের দ্বারা নিরাপদ কী (ব্রাউজারগুলি) ।


0

আপনি যদি ব্যবহারকারীদের একটি বিশেষ ধরণের অভিজ্ঞতা দিতে চান তবে আপনি pushStateব্রাউজারের ইউআরএলটিতে বিস্তৃত অক্ষর আনতে ব্যবহার করতে পারেন :

এখানে চিত্র বর্ণনা লিখুন

var u="";var tt=168;
for(var i=0; i< 250;i++){
 var x = i+250*tt;
console.log(x);
 var c = String.fromCharCode(x);
 u+=c; 
}
history.pushState({},"",250*tt+u);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.