কখনও কখনও শূণ্যস্থানগুলি সাইনটিতে ইউআরএল এনকোড হয়ে যায় +
, অন্য কোনও সময় %20
। পার্থক্য কী এবং কেন এটি হওয়া উচিত?
কখনও কখনও শূণ্যস্থানগুলি সাইনটিতে ইউআরএল এনকোড হয়ে যায় +
, অন্য কোনও সময় %20
। পার্থক্য কী এবং কেন এটি হওয়া উচিত?
উত্তর:
+
একটি স্থান মানে শুধুমাত্র মধ্যে application/x-www-form-urlencoded
যেমন একটি URL এর কোয়েরি অংশ হিসেবে বিষয়বস্তু:
http://www.example.com/path/foo+bar/path?query+name=query+value
এই ইউআরএলে, প্যারামিটারের নামটি query name
একটি স্পেস সহ এবং মানটি query value
একটি স্থানের সাথে, তবে পথের ফোল্ডারের নামটি আক্ষরিক অর্থে foo+bar
, নয় foo bar
।
%20
এই প্রসঙ্গে যে কোনও একটিতে স্থান এনকোড করার একটি বৈধ উপায়। সুতরাং আপনার যদি কোনও ইউআরএল অংশের অন্তর্ভুক্তির জন্য স্ট্রিংটি ইউআরএল-এনকোড করা দরকার হয় তবে স্পেস %20
এবং এর সাথে প্লাসগুলি প্রতিস্থাপন করা সর্বদা নিরাপদ %2B
। এটি কি উদাহরণস্বরূপ। encodeURIComponent()
জাভাস্ক্রিপ্টে করে। দুর্ভাগ্যবশত এটা কি নয় urlencode (পিএইচপি করে rawurlencode নিরাপদ)।
এছাড়াও দেখুন এইচটিএমএল 4.01 নির্দিষ্টকরণের অ্যাপ্লিকেশন / x-www-form-urlencoded
query+name=query+value
দিয়ে একটি ফর্ম থেকে একটি প্যারামিটার তৈরি করবে <input name="query name" value="query value">
। এটি query%20name
কোনও ফর্ম থেকে তৈরি হবে না , তবে এটি ব্যবহার করা সম্পূর্ণ নিরাপদ, যেমন। আপনি যদি নিজের সাথে একসাথে একটি ফর্ম জমা দিচ্ছেন XMLHttpRequest
। আপনার যদি কোনও জায়গার মতো কোনও ইউআরএল থাকে, যেমন <a href="http://www.example.com/foo bar/">
, তবে ব্রাউজারটি %20
আপনার ভুলটি ঠিক করার জন্য এটিকে এনকোড করে দেবে , তবে এটি সম্ভবত সবচেয়ে ভাল lied
foo bar
করতে foo+bar
?
encodeURIComponent(s).replace(/%20/g, '+')
যদি সত্যিই প্রয়োজন হয় তবে আপনি স্বাভাবিকভাবেই করতে পারেন+
http://www.example.com/some/path/to/resource?param1=value1
প্রশ্ন চিহ্ন এর আগের অংশ% এনকোডিং (তাই ব্যবহার করা আবশ্যক %20
স্থান জন্য) জিজ্ঞাসা চিহ্নটির পর আপনি ব্যবহার করতে পারেন পারেন %20
বা +
একটি স্থান জন্য। +
প্রশ্ন চিহ্ন ব্যবহারের পরে যদি আপনার সত্যিকারের প্রয়োজন হয় %2B
।
decodeURIComponent
এটি ডিকোড করে না।
+
একটি সংরক্ষিত চরিত্র তাই এটি ব্রাউজার দ্বারা সংরক্ষণ করা হবে।
+
{ foo: 'bar bar'}.to_query
foo=bar+bar
সুতরাং, এখানে উত্তরগুলি কিছুটা অসম্পূর্ণ। ইউআরএলগুলিতে কোনও স্থান এনকোড করার জন্য '% 20' এর ব্যবহারটি RFC3986 এ স্পষ্টভাবে সংজ্ঞায়িত করা হয়েছে , যা ইউআরআই কীভাবে নির্মিত তা নির্ধারণ করে। এনকোডিং স্পেসগুলির জন্য '+' ব্যবহারের এই স্পেসিফিকেশনে কোনও উল্লেখ নেই - আপনি যদি এই স্পেসিফিকেশনটির দ্বারা একমাত্র যান তবে একটি স্থান অবশ্যই '% 20' হিসাবে এনকোড করা উচিত।
এনকোডিং স্পেসগুলির জন্য '+' ব্যবহারের উল্লেখটি এইচটিএমএল স্পেসিফিকেশনের বিভিন্ন অবতার থেকে আসে - বিশেষত বিষয়বস্তুর প্রকার 'অ্যাপ্লিকেশন / x-www-form-urlencoded' বর্ণিত বিভাগে। এটি ফর্ম ডেটা পোস্ট করার জন্য ব্যবহৃত হয়।
এখন, এইচটিএমএল 2.0 স্পেসিফিকেশন (আরএফসি 1866) স্পষ্টভাবে 8.2.2 বিভাগে বলেছে যে জিইটি অনুরোধের ইউআরএল স্ট্রিংয়ের কোয়েরি অংশটি 'অ্যাপ্লিকেশন / এক্স-www-ফর্ম-urlencoded ' হিসাবে এনকোড করা উচিত। এটি, তাত্ত্বিকভাবে, পরামর্শ দেয় যে কোয়েরি স্ট্রিংয়ের ('?' এর পরে) ইউআরএলটিতে একটি '+' ব্যবহার করা আইনত।
কিন্তু ... এটা কি সত্যি? মনে রাখবেন, এইচটিএমএল নিজেই একটি সামগ্রীর স্পেসিফিকেশন এবং কোয়েরি স্ট্রিং সহ ইউআরএল এইচটিএমএল ব্যতীত অন্য সামগ্রীর সাথে ব্যবহার করা যেতে পারে। আরও, HTML অ্যাপ্লিকেশনটির পরবর্তী সংস্করণগুলি 'অ্যাপ্লিকেশন / x-www-form-urlencoded' বিষয়বস্তুতে '+' আইনী হিসাবে সংজ্ঞায়িত করা অব্যাহত রাখে, তারা জিইটি অনুরোধ ক্যোয়ারী স্ট্রিংগুলি সেই ধরণের হিসাবে সংজ্ঞায়িত করা বলে পুরোপুরি অংশটি বাদ দেয়। এইচটিএমএল ২.০ অনুমানের পরে কোয়েরিতে স্ট্রিং এনকোডিংয়ের বিষয়ে আসলে কোনও উল্লেখ নেই।
যা আমাদের সাথে প্রশ্ন রেখে যায় - এটি বৈধ? অবশ্যই প্রচুর লিগ্যাসি কোড রয়েছে যা কোয়েরি স্ট্রিংগুলিতে '+' সমর্থন করে এবং প্রচুর কোড যা এটিকে উত্পন্ন করে। মতবিরোধগুলি ভাল আপনি যদি '+' ব্যবহার করেন তবে ভাঙবেন না। (এবং প্রকৃতপক্ষে, আমি সম্প্রতি এটি নিয়ে সমস্ত গবেষণা করেছি কারণ আমি একটি বড় সাইট আবিষ্কার করেছি যা একটি জিইটি ক্যোয়ারিতে '% 20' কে স্থান হিসাবে গ্রহণ করতে ব্যর্থ হয়েছিল They তারা আসলে কোনও শতাংশ এনকোডযুক্ত চরিত্রটি ডিকোড করতে ব্যর্থ হয়েছিল So তাই আপনি পরিষেবাটি 'ব্যবহার আবার প্রাসঙ্গিক হতে পারে।)
তবে পরবর্তী সংস্করণগুলিতে এইচটিএমএল ২.০ স্পেসিফিকেশনটির ভাষা ব্যতীত স্পেসিফিকেশনগুলির বিশুদ্ধ পাঠ থেকে, URL গুলি সম্পূর্ণরূপে আরএফসি 3986 দ্বারা আচ্ছাদিত করা হয় যার অর্থ স্পেসগুলি '% 20' তে রূপান্তর করা উচিত। এবং যদি আপনি এইচটিএমএল ডকুমেন্ট ব্যতীত অন্য কোনও কিছুর জন্য অনুরোধ করে থাকেন তবে অবশ্যই এটি হওয়া উচিত।
%20
( <a href="?q=a b">
) হিসাবে এনকোড করে , তবে আপনি যখন কোনও ফর্ম প্রেরণ করেন তখন এটি +
সাইনটি ব্যবহার করে । আপনি +
স্বাক্ষর করে সাইন ( <a href="?q=a+b">
) ব্যবহার করে বা ফর্মটি ব্যবহার করে প্রেরণ করে এটি ওভাররাইড করতে পারেন XMLHTTPRequest
।
"20" হিসাবে নয়, সর্বদা স্থানগুলিকে% 20 হিসাবে এনকোড করা ভাল।
এটি আরএফসি -১ 1866 ((এইচটিএমএল ২.০ স্পেসিফিকেশন) ছিল যা স্পেস অক্ষরগুলিকে "অ্যাপ্লিকেশন / এক্স-এক্স-www-ফর্ম-urlencoded" কন্টেন্ট-টাইপ কী-মান জোড়ায় "+" হিসাবে এনকোড করা উচিত specified (অনুচ্ছেদ 8.2.1 দেখুন। সাবপাড়া 1।)। ফর্ম ডেটা এনকোডিংয়ের এই উপায়টি পরবর্তী এইচটিএমএল স্পেসিফিকেশনেও দেওয়া হয়েছে, অ্যাপ্লিকেশন / x-www-form-urlencoded সম্পর্কে প্রাসঙ্গিক অনুচ্ছেদ দেখুন।
এখানে ইউআরএলটিতে এমন স্ট্রিংয়ের একটি উদাহরণ দেওয়া হয়েছে যেখানে আরএফসি -1866 এনকোডিং স্পেসকে প্লাস হিসাবে মঞ্জুরি দেয়: "http://example.com/over/there?name=foo+bar"। সুতরাং, কেবল "?" এর পরে, স্পেসগুলি প্লাস দ্বারা প্রতিস্থাপন করা যেতে পারে, আরএফসি-1866 অনুসারে। অন্যান্য ক্ষেত্রে, স্পেসগুলি% 20 এ এনকোড করা উচিত। তবে যেহেতু প্রসঙ্গটি নির্ধারণ করা শক্ত, তাই স্পেসগুলি কখনই "+" হিসাবে এনকোড না করা এটি সেরা অনুশীলন।
আমি আরএফসি -৯৯,, পৃষ্ঠা ২.৩-এ সংজ্ঞায়িত "অনারক্ষিত" ব্যতীত সমস্ত চরিত্রকে শতাংশ-এনকোড করার পরামর্শ দেব
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
পার্থক্য কী: অন্যান্য উত্তর দেখুন।
+
পরিবর্তে কখন ব্যবহার করবেন %20
? +
যদি কোনও কারণে আপনি ইউআরএল কোয়েরি স্ট্রিং ( ?.....
) বা হ্যাশ টুকরা ( #....
) আরও পঠনযোগ্য করতে চান তবে ব্যবহার করুন । উদাহরণ: আপনি আসলে এটি পড়তে পারেন:
https://www.google.se/#q=google+doesn%27t+encode+:++++++2B+instead+of+spaces
( %2B
= +)
তবে নীচেরটি পড়তে খুব কঠিন: (কমপক্ষে আমার কাছে)
আমি মনে করি +
যে কোনও কিছু ভাঙ্গার সম্ভাবনা নেই, যেহেতু গুগল ব্যবহার করে +
(উপরের প্রথম লিঙ্কটি দেখুন) এবং তারা সম্ভবত এটি সম্পর্কে চিন্তাভাবনা করেছে। আমি +
কেবল নিজেকে পড়তে পারা যায় বলে গুগল মনে করে ঠিক আছে।