প্লাস (+) বা% 20 এ স্থান কখন এনকোড করবেন?


487

কখনও কখনও শূণ্যস্থানগুলি সাইনটিতে ইউআরএল এনকোড হয়ে যায় +, অন্য কোনও সময় %20। পার্থক্য কী এবং কেন এটি হওয়া উচিত?


উত্তর:


481

+একটি স্থান মানে শুধুমাত্র মধ্যে 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


5
সত্যিই আমি বিভ্রান্ত হয়ে পড়েছি, আমার প্রশ্নটি হল, যখন ব্রাউজারটি প্রথম ফর্মটি তৈরি করে এবং কখন দ্বিতীয় ফোমারটি করে?
মুহাম্মদ হেউডি

11
ব্রাউজারটি query+name=query+valueদিয়ে একটি ফর্ম থেকে একটি প্যারামিটার তৈরি করবে <input name="query name" value="query value">। এটি query%20nameকোনও ফর্ম থেকে তৈরি হবে না , তবে এটি ব্যবহার করা সম্পূর্ণ নিরাপদ, যেমন। আপনি যদি নিজের সাথে একসাথে একটি ফর্ম জমা দিচ্ছেন XMLHttpRequest। আপনার যদি কোনও জায়গার মতো কোনও ইউআরএল থাকে, যেমন <a href="http://www.example.com/foo bar/">, তবে ব্রাউজারটি %20আপনার ভুলটি ঠিক করার জন্য এটিকে এনকোড করে দেবে , তবে এটি সম্ভবত সবচেয়ে ভাল lied
ববিনস

6
জাভাস্ক্রিপ্ট কি ফাংশন foo barকরতে foo+bar?
সিসির

21
@ সিসির: এমন কোনও জেএস ফাংশন নেই যা URL- ফর্ম-এনকোডিং করবে। আপনার encodeURIComponent(s).replace(/%20/g, '+')যদি সত্যিই প্রয়োজন হয় তবে আপনি স্বাভাবিকভাবেই করতে পারেন+
ববিন্দ

2
এটি ফর্ম-ইউরেলকোডযুক্ত এমন কিছুর একটি খুব, খুব বিভ্রান্তির উদাহরণ। ইউআরএলগুলির সাথে এর কোনও যোগসূত্র নেই।
ডেভ ভ্যান ড্যান এ্যান্ডে

54

http://www.example.com/some/path/to/resource?param1=value1

প্রশ্ন চিহ্ন এর আগের অংশ% এনকোডিং (তাই ব্যবহার করা আবশ্যক %20স্থান জন্য) জিজ্ঞাসা চিহ্নটির পর আপনি ব্যবহার করতে পারেন পারেন %20বা +একটি স্থান জন্য। +প্রশ্ন চিহ্ন ব্যবহারের পরে যদি আপনার সত্যিকারের প্রয়োজন হয় %2B


6
@ ডেভভ্যান্ডেনইন্দে কেন?
সার্বেরোস

10
কারণ এটি ভুল এটি পুরানো অ্যাপ্লিকেশন / x-www-form-urlencoded মিডিয়া টাইপের অংশ যা URL গুলিতে প্রয়োগ হয় না। এছাড়াও, decodeURIComponentএটি ডিকোড করে না।
ডেভ ভ্যান ডেন আইন্দে

3
হ্যাঁ এটি সম্ভবত আরএফসি 1630 থেকে অনুলিপি করা হয়েছে এবং সত্যই কখনও স্ট্যান্ডার্ড ছিল না। টুলস.ইটিএফ.আর.এফ.এইচটিএমএল / আরএফসি 3986 হ'ল স্ট্যান্ডার্ড (আইপিভি 6 বা কোনও কিছুর জন্য আবার আপডেট হয়েছে)। নিশ্চিত ব্রাউজারগুলি এখনও এটি "সমর্থন" করে তবে এর অর্থ কী? এটি হয় সার্ভার বা ক্লায়েন্ট কোড যা ক্যোয়ারী স্ট্রিং পড়ে এবং ডিকোড করে না, ব্রাউজারটি নয়। ব্রাউজারটি কেবল এটিকে পিছনে পিছনে ফেলে দেয় এবং যেহেতু এটি +একটি সংরক্ষিত চরিত্র তাই এটি ব্রাউজার দ্বারা সংরক্ষণ করা হবে।
ডেভ ভ্যান ড্যান এ্যান্ডে

18
গুগল এটির অনুসন্ধানের ইউআরএলগুলিতে স্পেসের জন্য + এর ব্যবহার করে ( google.com/#q=perl+equivalent+to+php+urlencode+spaces+as+%2B )।
জাস্টিন

2
এফওয়াইআই: +{ foo: 'bar bar'}.to_queryfoo=bar+bar
রেলগুলি

46

সুতরাং, এখানে উত্তরগুলি কিছুটা অসম্পূর্ণ। ইউআরএলগুলিতে কোনও স্থান এনকোড করার জন্য '% 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
এক্স-ইউরি

URLSearchParams বিকাশকারীদের. com/.com/web/updates/2016/01/urlsearchparams যুক্ত করার উদ্দেশ্যটি বোঝা সত্যিই কঠিন , যা কিছু উত্তরাধিকার পদ্ধতিতে কাজ করে ( স্পেসকে '+' তে সিরিয়ালাইজ করে)। এটি এমনকি আই 11 এ সমর্থিত নয়!
নিমফেটামাইন

9

"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 / "-" / "." / "_" / "~"

1
নেট ফ্রেমওয়ার্কে আরল এনকোড কোয়েরিস্ট্রিংয়ে '+' ব্যবহার করে তবে আধুনিকতে নেট নেট% 20 ব্যবহৃত হয়
মাইকেল ফ্রেইজিম

@ MiFreidgeimSO-stopbeingevil আমাদের জানানোর জন্য আপনাকে ধন্যবাদ দেখে মনে হচ্ছে যে আধুনিক। নেট কোর আরও সুসংগত এবং সামঞ্জস্যপূর্ণ হওয়ার সিদ্ধান্ত নিয়েছে।
ম্যাক্সিম ম্যাসিউটিন

2

পার্থক্য কী: অন্যান্য উত্তর দেখুন।

+পরিবর্তে কখন ব্যবহার করবেন %20? +যদি কোনও কারণে আপনি ইউআরএল কোয়েরি স্ট্রিং ( ?.....) বা হ্যাশ টুকরা ( #....) আরও পঠনযোগ্য করতে চান তবে ব্যবহার করুন । উদাহরণ: আপনি আসলে এটি পড়তে পারেন:

https://www.google.se/#q=google+doesn%27t+encode+:++++++2B+instead+of+spaces ( %2B= +)

তবে নীচেরটি পড়তে খুব কঠিন: (কমপক্ষে আমার কাছে)

https://www.google.se/#q=google%20doesn%27t%20oops%20:%20%20this%20text%20%2B%20is%20different%20spaces

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


7
আমি বলি "পঠনযোগ্যতা" যুক্তিটি '+' এর পক্ষে সেরা প্রতিরক্ষা। "Google এটা আছে" যুক্তি প্রতারণাপূর্ণ হয় en.wikipedia.org/wiki/Argument_from_authority
FlipMcF

2
@ ফ্লিপমিসিএফ কর্তৃপক্ষের মিথ্যা যুক্তিযুক্ত উইকিপিডিয়া পৃষ্ঠাটি "যখন কোনও কর্তৃপক্ষ তাদের দক্ষতার ক্ষেত্রের বাইরে কোনও বিষয়ে উদ্ধৃত করা হয় বা যখন কর্তৃপক্ষের উদ্ধৃতি দেওয়া হয় তখন সত্য বিশেষজ্ঞ হয় না " - আমার মনে হয়, তবে কম্পিউটার, এইচটিটিপি এবং ইউআরএল গুগলের দক্ষতার ক্ষেত্রের মধ্যে এনকোডিং জিনিস ।
কাজম্যাগনুস

3
@ ফ্লিপএমসিএফ গুগলের আচরণের উদ্ধৃতি দেওয়া, এই ক্ষেত্রে, ইউআরএলগুলিতে "+" ব্যবহারের একটি বৈধ যুক্তি। গুগল একটি কর্তৃপক্ষ নয় এমন নয়, তবে সেই গুগল সম্ভবত সবচেয়ে বড় ইন্টারনেট সংস্থা এবং যদি তারা কোনও উপায়ে কিছু করে তবে ব্রাউজাররা একদিন সেই অনুশীলনকে সমর্থন করা বন্ধ করার সিদ্ধান্ত নেবে এমন সম্ভাবনা খুব কম। এছাড়াও, গুগল ক্রোম সর্বাধিক ভাগ সহ ব্রাউজারগুলির মধ্যে একটি এবং তারা গুগল যা চায় তা সমর্থন করবে। সব মিলিয়ে, আমি বলতে পারি যে "% 20" এর পরিবর্তে "+" ব্যবহার করে কারও কাছেই খুব কঠিন সময় আসবে না কারণ এটি অদূর ভবিষ্যতে রয়েছে।
jdferreira

আমি এই যুক্তি অন্য কোথাও চালিয়ে যেতে পছন্দ করব, যেখানে কর্তৃপক্ষের কাছে আবেদনকে অস্বীকার করতে জনপ্রিয়তার আবেদন রয়েছে appeal কমপক্ষে আমরা সকলেই একটি বিষয়ে একমত হতে পারি: '+' '% 20' এর চেয়ে উচ্চতর
ফ্লিপএমসিএফ

1
আসলে% 20 সহ ইউআরএল পড়া অনেক সহজ কারণ (ডেস্কটপ) ব্রাউজারগুলি যদি আপনি লিঙ্কের উপরে মাউস কার্সারটি সরান তবে উইন্ডোটির নীচে ডিকোড করা URL দেখায়। প্লাস চিহ্নগুলি অপরিবর্তিত প্রদর্শিত হয়।
মার্টিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.