কোন অক্ষর একটি ইউআরএল অবৈধ করে?


514

কোন অক্ষর একটি ইউআরএল অবৈধ করে?

এই বৈধ URL গুলো কি?

  • example.com/file[/].html
  • http://example.com/file[/].html

42
বৈধকরণের সময়, আপনার সর্বদা "ইতিবাচক চিন্তা" করা উচিত: "যা বৈধ তা" জিজ্ঞাসা করুন, অন্য সব কিছুই অবৈধ। (কয়েকটি) বৈধ অক্ষরের বিরুদ্ধে পরীক্ষা করা সমস্ত সম্ভাব্য অবৈধের চেয়ে বেশি নিরাপদ (এবং সহজ!)।
এমএফএক্স

উত্তর:


599

সাধারণ ইউআরআইতে আরএফসি 3986 দ্বারা সংজ্ঞায়িত হিসাবে ( বিভাগ 2: অক্ষর দেখুন ) নীচের যেকোন 84 টি অক্ষর থাকতে পারে:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=

নোট করুন যে এই তালিকাটিতে ইউআরআইতে এই অক্ষরগুলি কোথায় ঘটতে পারে তা উল্লেখ করে না।

অন্য যে কোনও অক্ষরকে শতাংশ-এনকোডিং ( %hh) দিয়ে এনকোড করা দরকার । ইউআরআই-এর প্রতিটি অংশের শতাংশ-এনকোডড শব্দের দ্বারা কোন অক্ষরকে উপস্থাপন করা উচিত তা সম্পর্কে আরও বিধিনিষেধ রয়েছে।


31
(অবশ্যই, অক্ষরের তালিকা নয় রাষ্ট্র করে যেখানে URI তারা ঘটতে পারে)
Eamon Nerbonne

75
এখানে একটি রেইজেক্স রয়েছে যা নির্ধারণ করবে যে পুরো স্ট্রিংয়ে কেবলমাত্র উপরের অক্ষরগুলি রয়েছে: / ^ [! # $ & -; =? - [] _ ​​a-z ~] + $ /
লিফ উইকল্যান্ড

43
@ টেকিফেরাস, হ্যাঁ, আমি "%" অব্যাহত অক্ষরের অনুমতি দিতে ভুলে গেছি। এটি আরও দেখতে /^([!#$&-;=?-[]_a-z~]|%[0-9a-fA-F]{2})+$/ দেখতে পাওয়া উচিত: এটির জন্য গ্রহণযোগ্য হওয়া উচিত ছিল এমন অন্য কোনও কিছুর উপস্থিতি ছিল? (কেবল স্পষ্ট করে বলতে গেলে, সেই রেজেক্স কেবল সেই স্ট্রিংটিতে বৈধ ইউআরএল অক্ষর রয়েছে কিনা তা পরীক্ষা করে
দেখায়

12
@ টিমভি আরএফসি 3986 বলেছেন, "শতাংশ-এনকোডড অক্টেটকে একটি অক্ষর ট্রিপলেট হিসাবে এনকোড করা হয়, শতাংশের সাথে"% "অক্ষরের সমন্বয়ে দুটি হেক্সাডেসিমাল অঙ্ক থাকে যা সেই অষ্টের সংখ্যার মান উপস্থাপন করে।" এটি আরও বলেছে, "যেহেতু শতাংশ ("% ") অক্ষর শতাংশ-এনকোডড অক্টেটের জন্য সূচক হিসাবে কাজ করে, সেই ইউটিআই-র মধ্যে ডেটা হিসাবে ব্যবহার করতে সেই অষ্টেটের জন্য এটি"% 25 "হিসাবে শতাংশ-এনকোড হওয়া আবশ্যক।" আমি পড়লাম যে এটি বলে যে "%" কেবল তখনই প্রদর্শিত হতে পারে যখন এটি দুটি হেক্স অঙ্কের পরে অনুসরণ করা হয়। কীভাবে পড়বেন?
লাইফ উইকল্যান্ড

13
@ ওয়েবেল আমার রেজেক্সে রেঞ্জগুলি ব্যবহার করে এই অক্ষরগুলি অন্তর্ভুক্ত করা হয়েছে। মধ্যবর্তী এবং ';' এবং 'এর মধ্যে?' এবং '[' আপনি সমস্ত অক্ষর আপনি দেখতে পাবেন না।
লিফ উইকল্যান্ড

193

কিছু স্পষ্টতা যুক্ত করতে এবং উপরের প্রশ্নটি সরাসরি সমাধান করার জন্য, বেশ কয়েকটি শ্রেণীর অক্ষর রয়েছে যা ইউআরএল এবং ইউআরআইয়ের জন্য সমস্যা তৈরি করে।

কিছু অক্ষর রয়েছে যা অনুমোদিত নয় এবং কোনও ইউআরএল / ইউআরআই, সংরক্ষিত অক্ষর (নীচে বর্ণিত) এবং অন্যান্য অক্ষরগুলির ক্ষেত্রে কখনও সমস্যা দেখা দিতে পারে না, তবে "বুদ্ধিমান" বা "অনিরাপদ" হিসাবে চিহ্নিত রয়েছে should অক্ষরগুলিকে কেন বাধা দেওয়া হয়েছে তার ব্যাখ্যাগুলি স্পষ্টভাবে আরএফসি -1738 (ইউআরএল) এবং আরএফসি -2396 (ইউআরআই) এ বর্ণিত । নোট করুন নতুন আরএফসি -3986 (আরএফসি -1738-এ আপডেট হওয়া) একটি নির্দিষ্ট প্রসঙ্গে কোন চরিত্রের অনুমোদিত তা নির্ধারণের সংজ্ঞা দেয় তবে পুরানো অনুমানটি একটি সহজ এবং আরও সাধারণ বিবরণ দেয় যা নিম্নলিখিত নিয়মগুলির সাথে অক্ষরগুলির মঞ্জুরিপ্রাপ্ত নয়।

ইউআরআই সিনট্যাক্সের মধ্যে অনুমোদিত ইউএস-এএসসিআইআই অক্ষরকে বাদ দেওয়া হয়েছে:

   control     = <US-ASCII coded characters 00-1F and 7F hexadecimal>
   space       = <US-ASCII coded character 20 hexadecimal>
   delims      = "<" | ">" | "#" | "%" | <">

"#" অক্ষরটি বাদ দেওয়া হয়েছে কারণ এটি কোনও খণ্ড সনাক্তকারী থেকে একটি ইউআরআই সীমিত করতে ব্যবহৃত হয়। শতাংশ অক্ষর "%" বাদ দেওয়া হয়েছে কারণ এটি পালানো অক্ষরের এনকোডিংয়ের জন্য ব্যবহৃত হয়। অন্য কথায়, "#" এবং "%" সংরক্ষিত অক্ষর যা নির্দিষ্ট প্রসঙ্গে ব্যবহার করা আবশ্যক।

মূর্খ অক্ষরগুলির তালিকা অনুমোদিত কিন্তু সমস্যা হতে পারে:

   unwise      = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`"

এমন একটি অক্ষর যা কোয়েরির উপাদানগুলির মধ্যে সংরক্ষিত থাকে এবং / বা কোনও ইউআরআই / ইউআরএলের মধ্যে বিশেষ অর্থ থাকে:

  reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","

উপরের "সংরক্ষিত" সিনট্যাক্স ক্লাসটি সেই অক্ষরগুলিকে বোঝায় যেগুলি ইউআরআইয়ের মধ্যে অনুমোদিত, তবে জেনেরিক ইউআরআই সিনট্যাক্সের কোনও নির্দিষ্ট উপাদানগুলির মধ্যে অনুমোদিত হতে পারে না। "সংরক্ষিত" সেটের অক্ষরগুলি সমস্ত প্রসঙ্গে সংরক্ষিত নয় । উদাহরণস্বরূপ হোস্টনামে একটি alচ্ছিক ব্যবহারকারীর নাম থাকতে পারে যাতে এটি এমন কিছু হতে পারে ftp://user@hostname/যেখানে '@' চরিত্রটির বিশেষ অর্থ রয়েছে।

এখানে এমন একটি URL- এর উদাহরণ যা অবৈধ এবং বুদ্ধিমান অক্ষর (যেমন '$', '[', ']') রয়েছে এবং যথাযথভাবে এনকোড করা উচিত:

http://mw1.google.com/mw-earth-vectordb/kml-samples/gp/seattle/gigapxl/$[level]/r$[y]_c$[x].jpg

ইউআরআই / ইউআরএলগুলির জন্য কিছু চরিত্রের সীমাবদ্ধতা হ'ল প্রোগ্রামিং ভাষা নির্ভর। উদাহরণস্বরূপ, '|' (0x7C) চরিত্র যদিও কেবল "অপরিণামদর্শী" কোনো URI বৈশিষ্ট হিসাবে চিহ্নিত একটি নিক্ষেপ করা হবে URISyntaxException জাভা java.net.URI কন্সট্রাকটর তাই একটি URL মত http://api.google.com/q?exp=a|bঅনুমোদিত নয় এবং পরিবর্তে এনকোড করা আবশ্যক http://api.google.com/q?exp=a%7Cbকোনো URI বস্তুর নিদর্শনের সঙ্গে জাভা ব্যবহার করে।


2
দুর্দান্ত, পুঙ্খানুপুঙ্খ উত্তর, আসল প্রশ্নের সরাসরি উত্তর দেওয়ার একমাত্র। সংরক্ষিত বিভাগে কাজের প্রয়োজন হতে পারে, উদাহরণস্বরূপ ক্যোয়ারী বিভাগে আক্ষরিক ?ঠিক আছে তবে এটির আগে অসম্ভব এবং আমি মনে করি না যে @এই তালিকার কোনওটির মধ্যে রয়েছে। ওহ, এবং %25শেষ স্ট্রিংয়ের পরিবর্তে , আপনি বোঝাতে চাইছেন না %7C?
বব স্টেইন

1
ধন্যবাদ। ভাল ক্যাচ: উদাহরণের মধ্যে% 25 টি টাইপ ছিল। আরএফসি -2396 থেকে সরাসরি "সংরক্ষিত" সিনট্যাক্সের বর্ণনায় পাদটীকা যুক্ত করা হয়েছে।
জেসনএম 1

1
এই উত্তরটি খারাপ নয় , তবে কিছু বিভ্রান্তি এবং ত্রুটি রয়েছে। আপনি প্রথমে অস্বীকৃত এবং সংরক্ষিত অক্ষরগুলি (খুব আলাদা জিনিস) সংশ্লেষ করেন, আপনি "বুদ্ধিমান" অক্ষর এবং অন্যান্য অস্বীকৃত অক্ষরগুলির মধ্যে খুব বেশি পার্থক্য তৈরি করেন (আরএফসি 3986 এ ফেলেছেন এবং সিন্টেক্সটিক্যালি অপ্রাসঙ্গিক এমনকি আরএফসি 2396 এও) এবং আপনি বিভ্রান্তিমূলকভাবে একটি তালিকা উপস্থাপন করেন সমস্ত তালিকাভুক্ত অক্ষর তালিকা হিসাবে "একটি কোয়েরি উপাদান মধ্যে" সংরক্ষিত ।
মার্ক আমেরিকা

1
ধন্যবাদ, বর্জনিত এবং একই হিসাবে সংরক্ষিত গোষ্ঠীকরণের অর্থ নয়। উত্তর আপডেট করেছেন। আইএমএইচও-র নিয়মগুলি আরএফসি -২৯৯6-এ যদিও বয়স্করা 3986 এর আপডেট হওয়া নিয়মগুলির চেয়ে বেশি সহজ বোঝা যায় Answer উত্তরটি আরও বেশি প্রতিফলিত করে যে কোন অক্ষরটি সাধারণত কোন প্রসঙ্গে অনুমোদিত বা অনুমোদিত নয় তার পরিবর্তে সাধারণভাবে সমস্যা হতে পারে।
জেসনএম 1

1
এটি উল্লেখযোগ্য যে সাম্প্রতিক প্রকাশে টমক্যাট (7.0.73+, 8.0.39+, 8.5.7+) এইচটিটিপি 400 ত্রুটিযুক্ত "বুদ্ধিমান" বিভাগের অক্ষরগুলির সাথে অনুরোধগুলি প্রত্যাখ্যান করা শুরু করেছে: "অনুরোধের লক্ষ্যবস্তুতে অবৈধ অক্ষর পাওয়া গেছে The বৈধ অক্ষরগুলি আরএফসি 7230 এবং আরএফসি 3986 "
ফিলিপ

100

এখানে বেশিরভাগ বিদ্যমান উত্তরগুলি অবাস্তব কারণ তারা ঠিক যেমন বিশ্বের ঠিকানার ব্যবহারগুলিকে অগ্রাহ্য করে:

প্রথমত, পরিভাষায় একটি ডিগ্রেশন। কি হয় এই ঠিকানাগুলি? সেগুলি কি বৈধ ইউআরএল?

.তিহাসিকভাবে, উত্তরটি "না" ছিল। আরএফসি 3986 অনুসারে , 2005 সাল থেকে, এই জাতীয় ঠিকানাগুলি ইউআরআই নয় (এবং ইউআরএল নয়, যেহেতু ইউআরএলগুলি এক প্রকারের ইউআরআই হয় )। ২০০ I আইইটিএফ স্ট্যান্ডার্ডগুলির পরিভাষা অনুযায়ী, আমাদের যথাযথভাবে তাদের আইআরআই (ইন্টারন্যাশনাল রিসোর্স আইডেন্টিফায়ারস) বলা উচিত , যা আরএফসি 3987 - সংজ্ঞায়িত করা হয়েছে , যা প্রযুক্তিগতভাবে ইউআরআই নয় তবে কেবল আইআরআই-তে সমস্ত নন-এএসসিআইআই অক্ষরকে শতাংশ-এনকোডিং করে ইউআরআইতে রূপান্তরিত করা যেতে পারে ।

আধুনিক বৈশিষ্ট অনুযায়ী, উত্তর "হ্যাঁ"। WHATWG জীবনযাত্রার মান কেবল সবকিছু যা পূর্বে "URL" হিসাবে "URI উল্লিখিত" বা "Iris" বলা হবে শ্রেণীভুক্ত করে। এটি নির্দিষ্ট করা পরিভাষাটির সাথে একত্রিত করে যে সাধারণ লোকেরা যারা অনুপাতটি পড়ে না তারা "ইউআরএল" শব্দটি কীভাবে ব্যবহার করে, যা এই স্পপের অন্যতম লক্ষ্য ছিল

WHATWG লিভিং স্ট্যান্ডার্ডের অধীনে কোন অক্ষর অনুমোদিত?

"ইউআরএল" এর এই নতুন অর্থ অনুসারে, কোন অক্ষরের অনুমতি রয়েছে? ইউআরএল এর অনেক অংশে, যেমন ক্যোয়ারী স্ট্রিং এবং পাথ, আমাদেরকে নির্বিচারে "ইউআরএল ইউনিট" ব্যবহার করার অনুমতি দেওয়া হয়েছে যা হ'ল

ইউআরএল কোড পয়েন্ট এবং শতাংশ-এনকোডড বাইট

"ইউআরএল কোড পয়েন্ট" কী?

URL টি কোড পয়েন্ট , হওয়া ASCII আলফানিউমেরিক হয় U + এ 0021 (!), ইউ + + 0024 ($), উ + + 0026 (&), ইউ + + 0027 ( '), উ + + 0028 বাম প্রথম বন্ধনী, U- + + 0029 ডান বন্ধনী, U- + + 002A (*), ইউ + 002 বি (+), ইউ + 002 সি (,), ইউ + 002 ডি (-), ইউ + 002 ই (।), ইউ + 002 এফ (/), ইউ + 003 এ (:), ইউ + 003 বি (;), U + 003D (=), U + 003F (?), U + 0040 (@), U + 005F (_), U + 007E (~), এবং U + 00A0 থেকে U সীমাতে কোড পয়েন্ট + 10 এফএফএফডি, সারোগেটস এবং ননচার্যাক্টর বাদে অন্তর্ভুক্ত।

(নোট করুন যে "ইউআরএল কোড পয়েন্ট" এর তালিকা অন্তর্ভুক্ত নয় %, তবে সেগুলি %"ইউআরএল কোড ইউনিটগুলিতে" অনুমোদিত হয় যদি তারা শতাংশ-এনকোডিং ক্রমের অংশ হয়))

একমাত্র জায়গা আমি স্পট করতে পারেন যেখানে বৈশিষ্ট কোন চরিত্র যে ব্যবহার অনুমতি দেয় না এই সেটে রয়েছে হোস্ট , যেখানে IPv6 অ্যাড্রেসের মধ্যে লেখা হয় [এবং ]অক্ষর। ইউআরএল এর অন্য কোথাও, হয় ইউআরএল ইউনিট অনুমোদিত বা কিছু এমনকি আরও নিয়ন্ত্রিত অক্ষর সেট।

পুরানো আরএফসিগুলির অধীনে কোন অক্ষরের অনুমতি ছিল?

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

প্রথমত, আমাদের দুটি ধরণের আরএফসি 3986 টি সংরক্ষিত অক্ষর রয়েছে :

  • :/?#[]@, যা আরএফসি 3986-এ সংজ্ঞায়িত ইউআরআইয়ের জেনেরিক সিনট্যাক্সের অংশ
  • !$&'()*+,;=যা আরএফসির জেনেরিক সিনট্যাক্সের অংশ নয়, তবে নির্দিষ্ট ইউআরআই স্কিমগুলির সিনট্যাকটিক উপাদান হিসাবে ব্যবহারের জন্য সংরক্ষিত। উদাহরণস্বরূপ, সেমিকোলন এবং কমা বাক্য গঠন প্রণালী অংশ হিসেবে ব্যবহার করা হয় ডেটা URI উল্লিখিত , এবং &এবং =সর্বব্যাপী অংশ হিসেবে ব্যবহার করা হয় ?foo=bar&qux=baz(যা কোয়েরি স্ট্রিং মধ্যে বিন্যাস করা হয় না বোঝায় যা RFC 3986 দ্বারা নির্দিষ্ট)।

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

আরএফসি 3986 কিছু অনারक्षित অক্ষরও নির্দিষ্ট করে , যা সর্বদা কোনও এনকোডিং ছাড়াই ডেটা উপস্থাপনের জন্য ব্যবহার করা যেতে পারে:

  • abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~

অবশেষে, %চরিত্রটি নিজেই শতাংশ-এনকোডিংয়ের জন্য অনুমোদিত।

এটি কেবলমাত্র নিম্নলিখিত ASCII টি অক্ষর ফেলেছে যা ইউআরএল-এ উপস্থিত হওয়া নিষিদ্ধ :

  • নতুন লাইন, ট্যাব এবং ক্যারেজ রিটার্ন সহ নিয়ন্ত্রণের অক্ষর (অক্ষর 0-1F এবং 7F)।
  • "<>\^`{|}

এএসসিআইআই এর অন্য প্রতিটি চরিত্র আইনত কোনও ইউআরএল-এ ফিচার করতে পারে।

তারপরে আরএফসি 3987 নীচের ইউনিকোড চরিত্রের সীমার সাথে অরক্ষিত অক্ষরের সেটটিকে প্রসারিত করেছে:

  %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF
/ %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD
/ %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD
/ %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD
/ %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD
/ %xD0000-DFFFD / %xE1000-EFFFD

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


পরিশেষে, এটি সম্ভবত লক্ষনীয় যে কোনও URL টির মধ্যে কোন অক্ষর আইনীভাবে উপস্থিত হতে পারে তা জানার পক্ষে কিছু দেওয়া স্ট্রিং আইনী URL বা না তা সনাক্ত করার পক্ষে যথেষ্ট নয়, কারণ কিছু অক্ষর কেবলমাত্র URL এর নির্দিষ্ট অংশে বৈধ। উদাহরণস্বরূপ, সংরক্ষিত অক্ষরগুলি [এবং HTTP: // [1080 :: 8: 800: 200C: 417A] / foo এর] মতো URL এ আইপিভি 6 আক্ষরিক হোস্টের অংশ হিসাবে আইনী তবে অন্য কোনও প্রসঙ্গে আইনী নয়, তাই ওপির উদাহরণ অবৈধ।http://example.com/file[/].html


3
এক্সপ্লোসিভ রেফারেন্সের জন্য প্লাসোন (যেমন, আরএফসি)
ইয়ান ফটো

19

আপনার পরিপূরক প্রশ্নে আপনি জিজ্ঞাসা করেছিলেন www.example.com/file[/].htmlকোনও বৈধ URL কিনা।

এই ইউআরএলটি বৈধ নয় কারণ একটি URL টি এক প্রকারের ইউআরআই এবং একটি বৈধ ইউআরআইয়ের মতো স্কিম থাকতে হবে http:(দেখুন আরএফসি 3986 )।

যদি আপনি জিজ্ঞাসা করতে চেয়েছিলেন যে http://www.example.com/file[/].htmlকোনও বৈধ URL আছে কিনা তবে উত্তরটি এখনও নেই কারণ বর্গাকার বন্ধনী অক্ষরগুলি বৈধ নয়।

বর্গাকার বন্ধনী অক্ষরগুলি এই ফর্ম্যাটের URL গুলির জন্য সংরক্ষিত রয়েছে: http://[2001:db8:85a3::8a2e:370:7334]/foo/bar(যেমন একটি হোস্ট নামের পরিবর্তে একটি আইপিভি 6 লিটারাল)

আপনি যদি বিষয়টি পুরোপুরি বুঝতে চান তবে সাবধানে আরএফসি 3986 পড়তে হবে reading


আরএফসি পড়ার পরে, আমি @ স্টেফেন সি আরও বিস্তারিত ব্যাখ্যার সাথে একমত হতে আগ্রহী।
স্কোলিমা

একটি URL গুলি ইউআরআইয়ের উপসেট নয়। [এবং ]প্রায় পারজার আমি দেখেছি জন্য কোনো URI বৈধ নয়। এটি সত্যই আমাকে সত্যিকারের জগতে খারাপ করেছে: stackoverflow.com/questions/11038967/…
অ্যাডাম জেন্ট

@ অ্যাডজেন্ট ইউআরএলগুলি ইউআরআইয়ের একটি উপসেট are তাদের মধ্যে একমাত্র পার্থক্য হ'ল তারা কি উত্সটির অবস্থান বর্ণনা করেছেন - যা সিনটিক পার্থক্য, সিনট্যাকটিক নয়। যদি আপনি যে পার্সারগুলি দেখেছেন যে তারা "ইউআরআই" পার্সার হিসাবে নিজেকে লেবেল করেছে তারা "ইউআরএল" পার্সার হিসাবে লেবেলযুক্ত তাদের সাথে স্কোয়ার ব্র্যাকেটগুলি আলাদাভাবে আচরণ করে, তবে এটি খাঁটি কাকতালীয় ঘটনা, ইউআরএল এবং ইউআরআইয়ের মধ্যে কোনও পার্থক্যের কারণে নয়।
মার্ক অ্যামেরি

@ মার্ক অ্যামেরি এটি সি ++ সি'র সুপারস্টেট বলে উপমা বলে মনে করছেন এটি বেশিরভাগ অংশের জন্য তবে সম্পূর্ণ সত্য নয় কারণ (ইউআরএল এবং সি) এর চেয়ে অনেক বেশি বয়স্ক তাদের এমন আচরণকে অন্তর্ভুক্ত করতে হবে যা কম কঠোর। সমস্যাটি হ'ল ইউআরএল পার্সারগুলি এমন জিনিসগুলিকে পার্স করবে যা বৈধ ইউআরআই নয় ... এবং আমি তাদের বেশিরভাগটির অর্থ বলতে চাই (সত্যি বলতে আমি এটিকে এতগুলি ভাষায় দেখানোতে খুব ক্লান্ত হয়ে পড়েছি) এটি কাকতালীয় নয় এটি পিছনের দিকে সামঞ্জস্য bility আমরা কি একমত হতে পারি যে ইউআরএল স্পেক কমপক্ষে কম বয়সী?
অ্যাডাম জেন্ট

@ মার্ক অ্যামেরি যা পাইথন, সি #, জাভা এবং কয়েকটি সি লাইব্রেরি থেকে পার্সারগুলি ইউআরআইয়ের Unwiseজন্য খুব গুরুত্ব সহকারে নেবে এবং ইউআরএল লাইব্রেরিগুলির সাথে ঠিক আছে। তা এড়িয়ে যাওয়ার কোনও পতাকা নেই Unwise। ইউআরএলগুলির জন্য রাস্ট ল্যাং (যেহেতু এটি একটি ব্রাউজারের জন্য তৈরি করা হচ্ছে আমি কৌতূহল তা কী করে তা) যাচাই করতে হবে। বেশিরভাগ ব্রাউজারগুলি সুখে "[", "]" পাশ করে দেবে। তত্ত্বের ক্ষেত্রে যেমন আমি সি / সি ++ দিয়ে বলেছিলাম সেগুলি সাব / সুপার তবে বাস্তবতা এতটা সত্য নয়। এটি সুপার / সাবসেটের স্পেক এবং শব্দার্থবিজ্ঞানের ব্যাখ্যার উপর অত্যন্ত নির্ভরশীল।
অ্যাডাম জেন্ট

12

সমস্ত বৈধ অক্ষর যা একটি ইউআরআইতে ব্যবহৃত হতে পারে (একটি ইউআরএল এক প্রকারের ইউআরআই ) এটি আরএফসি 3986 - সংজ্ঞায়িত করা হয়েছে ।

অন্য সমস্ত অক্ষর একটি ইউআরএল ব্যবহার করা যেতে পারে যে তারা "URL এনকোডেড" প্রথমে রয়েছে। এর মধ্যে নির্দিষ্ট "কোডগুলি" (সাধারণত হেক্সাডেসিমাল সংখ্যার পরে শতকরা প্রতীক (%) আকারে অবৈধ চরিত্রটি পরিবর্তন করা জড়িত।

এই লিঙ্কটি, এইচটিএমএল ইউআরএল এনকোডিং রেফারেন্স , অবৈধ অক্ষরগুলির জন্য এনকোডিংগুলির একটি তালিকা রয়েছে।


এবং ইউনিকোড অক্ষরগুলির জন্য, উইকিপিডিয়া নিবন্ধ পারসেন্ট-এনকোডিংয়ে নিম্নোক্তভাবে বলা হয়েছে: "জেনেরিক ইউআরআই সিনট্যাক্স আদেশ দেয় যে নতুন ইউআরআই স্কিমগুলি যে কোনও ইউআরআইতে বর্ণের ডেটার উপস্থাপনের জন্য সরবরাহ করে, অবশ্যই, অনুবাদ ছাড়াই অনাবৃত সেট থেকে অক্ষরগুলি উপস্থাপন করতে হবে, এবং ইউটিএফ -8 অনুসারে অন্য সমস্ত অক্ষরকে বাইটে রূপান্তর করা উচিত এবং তারপরে সেই মানগুলিকে শতাংশ-এনকোড করা উচিত
ডেভিডআরআর

9

ইউনিকোডের বেশ কয়েকটি চরিত্রের ব্যাপ্তি বৈধ এইচটিএমএল 5 , যদিও এটি ব্যবহার করা এখনও তাদের পক্ষে ভাল ধারণা নয়।

উদাহরণস্বরূপ, hrefদস্তাবেজগুলি http://www.w3.org/TR/html5/links.html#attr-hyperlink-href :

একটি এবং ক্ষেত্রের উপাদানগুলির মধ্যে href বৈশিষ্ট্যের একটি মান অবশ্যই থাকা উচিত যা স্পেস দ্বারা ঘিরে সম্ভাব্য চারপাশে একটি বৈধ URL।

তারপরে "বৈধ ইউআরএল" এর সংজ্ঞাটি http://url.spec.whatwg.org/ এ নির্দেশ করে , যার মতে এটি লক্ষ্য করে:

সমসাময়িক বাস্তবায়নের সাথে আরএফসি 3986 এবং আরএফসি 3987 সারিবদ্ধ করুন এবং তাদের প্রক্রিয়াটি অপ্রচলিত করুন।

এই দস্তাবেজটি ইউআরএল কোড পয়েন্টগুলি এমনভাবে সংজ্ঞায়িত করে :

ASCII বর্ণমালা, "!", "$", "&", "" "," (",") "," * "," + ",", "-", "।", "/" , ":", ";", "=", "?", "@", "_", "~" এবং কোডগুলি U + 00A0 থেকে U + D7FF, U + E000 থেকে U + FDCF এর মধ্যে রয়েছে , U + FDF0 থেকে U + FFFD, U + 10000 থেকে U + 1FFFD, U + 20000 থেকে U + 2FFFD, U + 30000 থেকে U + 3FFFD, U + 40000 থেকে U + 4FFFD, U + 50000 থেকে U + 5FFFD, U +60000 থেকে U + 6FFFD, U + 70000 থেকে U + 7FFFD, U + 80000 থেকে U + 8FFFD, U + 90000 থেকে U + 9FFFD, U + A0000 থেকে U + AFFFD, U + B0000 থেকে U + BFFFD, U + C0000 U + CFFFD, U + D0000 থেকে U + DFFFD, U + E1000 থেকে U + EFFFD, U + F0000 থেকে U + FFFFD, U + 100000 থেকে U + 10FFFD

"URL টি পয়েন্টগুলি" শব্দটি তখন বিবৃতিতে ব্যবহৃত হয়:

সি যদি কোনও ইউআরএল কোড পয়েন্ট না হয় এবং "%" না হয়, পার্স ত্রুটি।

পার্সিং অ্যালগরিদমের বেশ কয়েকটি অংশে, স্কিমা, কর্তৃপক্ষ, আপেক্ষিক পাথ, ক্যোয়ারী এবং খণ্ড খণ্ডিত বিবরণ সহ: তাই মূলত পুরো URL টি।

এছাড়াও, বৈধকরণকারী http: //) ator.w3.org/ যেমন "你好"ইউআরএলগুলির জন্য পাস করে, এবং স্পেসগুলির মতো অক্ষরযুক্ত URL গুলির জন্য পাস করে না"a b"

অবশ্যই, স্টিফেন সি দ্বারা উল্লিখিত হিসাবে, এটি কেবল অক্ষর সম্পর্কে নয়, প্রসঙ্গেও: আপনাকে পুরো অ্যালগরিদম বুঝতে হবে। তবে যেহেতু ক্লাস "ইউআরএল কোড পয়েন্ট" অ্যালগরিদমের মূল পয়েন্টগুলিতে ব্যবহৃত হয়, এটি আপনাকে কী ব্যবহার করতে পারে বা কী ব্যবহার করতে পারে সে সম্পর্কে একটি ভাল ধারণা দেয়।

আরও দেখুন: ইউআরএলগুলিতে ইউনিকোডের অক্ষর


5

ইউআরএলগুলিকে স্ট্রিংয়ে বিভক্ত করতে আমার চরিত্র নির্বাচন করতে হবে, তাই আমি এমন অক্ষরের তালিকা তৈরির সিদ্ধান্ত নিয়েছি যা ইউআরএলটিতে নিজের দ্বারা পাওয়া যায় না:

>>> allowed = "-_.~!*'();:@&=+$,/?%#[]?@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
>>> from string import printable
>>> ''.join(set(printable).difference(set(allowed)))
'`" <\x0b\n\r\x0c\\\t{^}|>'

সুতরাং, সম্ভাব্য পছন্দগুলি হ'ল নিউলাইন, ট্যাব, স্পেস, ব্যাকস্ল্যাশ এবং "<>{}^|। আমার ধারণা আমি স্থান বা নিউলাইন দিয়ে যাব। :)


2

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

ইউআরএলগুলি সনাক্ত করার জন্য নিয়মিত প্রকাশগুলি প্রচুর পরিমাণে, গুগল করে :)



এই উত্তরটি পরামর্শ দেয় যে ইউআরএল বৈধতা একটি রেইগেক্সের জন্য নয়, তবে একটি ভাষা / প্ল্যাটফর্ম-নির্দিষ্ট লাইব্রেরির জন্য কাজ
ডেভিডআরআর

0

আমি পুরানো HTTP (0.9, 1.0, 1.1) অনুরোধ এবং প্রতিক্রিয়া পাঠক / লেখক বাস্তবায়ন করছি। অনুরোধ ইউআরআই হ'ল সবচেয়ে সমস্যাযুক্ত জায়গা।

আপনি কেবল আরএফসি 1738, 2396 বা 3986 হিসাবে এটি ব্যবহার করতে পারবেন না। অনেক পুরানো এইচটিটিপি ক্লায়েন্ট এবং সার্ভার রয়েছে যা আরও অক্ষরকে অনুমতি দেয়। সুতরাং আমি দুর্ঘটনাক্রমে প্রকাশিত ওয়েবসারভার অ্যাক্সেস লগগুলির উপর ভিত্তি করে গবেষণা করেছি "GET URI HTTP/1.0" 200

আমি খুঁজে পেয়েছি যে নিম্নলিখিত অ-মানক অক্ষরগুলি প্রায়শই ইউআরআইতে ব্যবহৃত হয়:

\ { } < > | ` ^ "

এই অক্ষরগুলি আরএফসি 1738 এ অসুরক্ষিত হিসাবে বর্ণনা করা হয়েছিল ।

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

এই গবেষণা সম্পর্কে আরও তথ্য পড়ুন দয়া করে http-og


-4

আমি পিএইচপি-র জন্য বেশ কয়েকটি নিয়মিত এক্সপ্রেশন নিয়ে এসেছি যা পাঠ্যে url কে অ্যাঙ্কর ট্যাগগুলিতে রূপান্তর করবে। (প্রথমে এটি সমস্ত www। ইউআরএলগুলিকে http: // এ রূপান্তর করে তারপরে https?: // এর মাধ্যমে সমস্ত ইউআরএলকে একটি href = ... এইচটিএমএল লিঙ্কে রূপান্তরিত করে)

$string = preg_replace('/(https?:\/\/)([!#$&-;=?\-\[\]_a-z~%]+)/sim', '<a href="$1$2">$2</a>', preg_replace('/(\s)((www\.)([!#$&-;=?\-\[\]_a-z~%]+))/sim', '$1http://$2', $string) );


4
-1; তারা উভয়ই কিছু ক্ষমতার সাথে ইউআরএল জড়িত এই বিষয়টির বাইরে যে প্রশ্ন করা হয়েছিল তার সাথে এর কোনও যোগসূত্র নেই।
মার্ক আমেরিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.