ইউআরএল স্পেস অক্ষর এনকোডিং: + বা% 20?


722

কোনও ইউআরএল-এ কোনও স্থান কখন এনকোড করা থাকে +এবং কখন এটিকে এনকোড করা হয় %20?


2
এই প্রশ্নটি বেশ কয়েকটি ভাষা-নির্দিষ্ট প্রশ্ন হিসাবে আরও সহায়ক হবে, তাই না?
স্কয়ারকাণ্ডি


3
@ আপনি যে প্রশ্নটির সাথে লিঙ্ক করেন সেটি ব্যবহারকারীর পরে জিজ্ঞাসা করা হয়েছিল, এটিকে নয় বরং এটিকে দুপ করে তোলে।
যুদ্ধের মতো শিম্পাঞ্জি

উত্তর:


424

উইকিপিডিয়া থেকে (জোর দেওয়া এবং লিঙ্ক যুক্ত):

এইচটিএমএল ফর্মগুলিতে প্রবেশ করা ডেটা যখন জমা দেওয়া হয়, ফর্ম ফিল্ডের নাম এবং মানগুলি এনটিড করে সার্ভারের কাছে এইচটিটিপি অনুরোধ বার্তায় জিইটি বা পোষ্ট পদ্ধতি ব্যবহার করে বা orতিহাসিকভাবে ইমেলের মাধ্যমে প্রেরণ করা হয়। ডিফল্টরূপে ব্যবহৃত এনকোডিংটি সাধারণ ইউআরআই শতাংশ-এনকোডিং নিয়মের একেবারে প্রাথমিক সংস্করণের উপর ভিত্তি করে, অনেকগুলি পরিবর্তন যেমন নিউলাইনের নরমালাইজেশন এবং "% 20" এর পরিবর্তে স্পেসগুলি "+" দিয়ে প্রতিস্থাপন করে। এইভাবে এনকোড করা মাইম টাইপের ডেটা হ'ল অ্যাপ্লিকেশন / এক্স-www-ফর্ম-urlencoded এবং এটি বর্তমানে HTML এবং এক্স ফোর্মের নির্দিষ্টকরণগুলিতে (এখনও খুব পুরানো পদ্ধতিতে) সংজ্ঞায়িত।

সুতরাং, ইউআরএলগুলিতে ফর্ম ডেটা ব্যবহার করার সময় পরিবর্তিত ফর্মটিতে আসল শতাংশ এনকোডিং %20ব্যবহার করে +। সুতরাং আপনি সম্ভবত +একটি এর পরে ক্যোরি স্ট্রিংয়ের URL গুলিতে দেখতে পাচ্ছেন ?


2
সুতরাং + এনকোডিংটি কি প্রযুক্তিগতভাবে মাল্টিপার্ট / ফর্ম-ডেটা এনকোডিং হবে, যখন শতাংশ এনকোডিংটি অ্যাপ্লিকেশন / x-www-form-urlencoded?
বিসি।

17
@ বিবিসি: না - multipart/form-dataমাইম এনকোডিং ব্যবহার করে; application/x-www-form-urlencodedব্যবহার করে +এবং সঠিকভাবে এনকোডেড ইউআরআই ব্যবহার করে %20
ম্যাকডোয়েল

8
"সুতরাং আপনি সম্ভবত কোয়েরি স্ট্রিংয়ের URL এর পরে কেবল URL এর পরে + দেখতে পাচ্ছেন?" একটি সংক্ষিপ্তসার ইউআরএল এর পথ অংশে আপনার কখনই "+" দেখা উচিত নয় কারণ এটি আপনার প্রত্যাশা (স্থান) যা করবে না।
অ্যাডাম জেন্ট

34
সুতরাং মূলত: জিইটি জমা দেওয়ার লক্ষ্য http://www.bing.com/search?q=hello+worldএবং নামে স্থান সহ একটি সংস্থানhttp://camera.phor.net/cameralife/folders/2012/2012-06%20Pool%20party/
উইলিয়াম এন্টারিকেন

8
নোট করুন যে ইমেল লিঙ্কগুলির জন্য আপনার প্রয়োজনের জন্য% 20 হবে এবং + এর পরে? উদাহরণস্বরূপ mailto:support@example.org?subject=I%20need%20help,। যদি আপনি এটির সাথে + চেষ্টা করে থাকেন তবে ইমেলটি ফাঁকের পরিবর্তে + এস দিয়ে খোলা হবে।
সিগমোরাল

286

এই বিভ্রান্তি হ'ল ইউআরএলগুলি এখনও অবধি 'ভাঙ্গা'।

উদাহরণস্বরূপ " http://www.google.com " নিন । এটি একটি ইউআরএল। একটি ইউআরএল একটি ইউনিফর্ম রিসোর্স লোকেটার এবং সত্যিই একটি ওয়েব পৃষ্ঠার পয়েন্টার (বেশিরভাগ ক্ষেত্রে)। 1994 সালে প্রথম স্পেসিফিকেশন হওয়ার পরে ইউআরএলগুলির আসলে খুব সু-সংজ্ঞায়িত কাঠামো রয়েছে।

আমরা " http://www.google.com " ইউআরএল সম্পর্কে বিস্তারিত তথ্য বের করতে পারি :

+---------------+-------------------+
|      Part     |      Data         |
+---------------+-------------------+
|  Scheme       | http              |
|  Host         | www.google.com    |
+---------------+-------------------+

যদি আমরা আরও জটিল ইউআরএল যেমন:

" https: // bob: bobi@www.l ਹੁਣch.com: 8080 / ফাইল; পি = 1? কিউ = 2 # তৃতীয় "

আমরা নিম্নলিখিত তথ্যগুলি বের করতে পারি:

+-------------------+---------------------+
|        Part       |       Data          |
+-------------------+---------------------+
|  Scheme           | https               |
|  User             | bob                 |
|  Password         | bobby               |
|  Host             | www.lunatech.com    |
|  Port             | 8080                |
|  Path             | /file;p=1           |
|  Path parameter   | p=1                 |
|  Query            | q=2                 |
|  Fragment         | third               |
+-------------------+---------------------+

https://bob:bobby@www.lunatech.com:8080/file;p=1?q=2#third
\___/   \_/ \___/ \______________/ \__/\_______/ \_/ \___/
  |      |    |          |          |      | \_/  |    |
Scheme User Password    Host       Port  Path |   | Fragment
        \_____________________________/       | Query
                       |               Path parameter
                   Authority

সংরক্ষিত অক্ষরগুলি প্রতিটি অংশের জন্য পৃথক।

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

এখন ক্যোয়ারির অংশে, ফাঁকা স্থানগুলি "+" এ এনকোড করা যেতে পারে (পিছনের সামঞ্জস্যের জন্য: ইউআরআই মানক হিসাবে এটি অনুসন্ধান করার চেষ্টা করবেন না) বা "% 20" যখন "+" অক্ষর (এই অস্পষ্টতার ফলে) ) "% 2B" এ পালাতে হবে।

এর অর্থ হল "নীল + হালকা নীল" স্ট্রিংটিকে পথ এবং ক্যোয়ারী অংশগুলিতে আলাদাভাবে এনকোড করতে হবে:

" http://example.com/blue+light%20blue?blue%2Blight+blue "।

সেখান থেকে আপনি অনুমান করতে পারেন যে সম্পূর্ণরূপে নির্মিত ইউআরএলকে এনকোডিং করা URL কাঠামোর সিনট্যাকটিকাল সচেতনতা ব্যতীত অসম্ভব।

এটি এই পর্যন্ত সিদ্ধ হয়:

আপনার %20আগে ?এবং +পরে থাকা উচিত ।

সূত্র


>> আপনার আগে 20% থাকা উচিত? এবং + পরে মূর্খ প্রশ্নের জন্য দুঃখিত। আমি কিছুটা জানি যে "এর পরে হ্যাশট্যাগ প্যারামিটার ব্যবহার করা হয়?" প্রশ্ন চিহ্ন পরামিতি। যদিও এটি কিছুটা আলাদা কারণ "#" ব্যবহার করা পৃষ্ঠাটি পুনরায় লোড করে না। তবে আমি "#" হ্যাশট্যাগের পরে% 20 এবং + সাইন ব্যবহার করার চেষ্টা করেছি এবং মনে হচ্ছে এটি কার্যকর হয়নি। "#" এর পরে কোনটি ব্যবহার করা দরকার?
ফিলসিব

@Philcyb আপনি এই পড়া ওয়ানা পারে en.wikipedia.org/wiki/Percent-encoding
Matas Vaitkevicius

কোয়েরি অংশটির আসলে কোনও "অফিসিয়াল" মান আছে? আমি ভাবলাম মূলত সেই অংশটি অ্যাপ্লিকেশন নির্দিষ্ট। ৯৯.৯৯% অ্যাপ্লিকেশন ব্যবহার করে key1=value1&key1=value2যেখানে কী এবং মানগুলি যে কোনও নিয়ম encodeURIComponentঅনুসরণ করে এনকোড করা হয় তবে এএএফএইকে ক্যোয়ারী অংশের বিষয়বস্তুগুলি সম্পূর্ণ অ্যাপ্লিকেশনটিতে 100% অবধি রয়েছে। অন্যথায় এটি প্রথমে যায় #কোনও সরকারী এনকোডিং নেই।
gman

সদৃশ প্রশ্নের একটি সদৃশ উত্তর! তবে হুম, ঠিক আছে, আমি উভয়কেই ইউপি দিয়েছিলাম।
ভ্লাদিমির ভুকানাক

2
যে ASCII উপাদান লেবেলিং মহাকাব্য।
jsejcksn

25

আমি সুপারিশ করব %20

আপনি কি তাদের হার্ড-কোডিং করছেন?

যদিও ভাষাগুলিতে এটি খুব সামঞ্জস্যপূর্ণ নয়। যদি আমি ভুল না হয়ে থাকি তবে পিএইচপি-তে urlencode()স্পেসের সাথে +এমন urlencode()আচরণ করা হয় যেখানে পাইথন তাদের সাথে একই আচরণ করে %20

সম্পাদনা করুন:

মনে হচ্ছে আমি ভুল করছি। পাইথনের urlencode()(কমপক্ষে 2.7.2 এ) এর quote_plus()পরিবর্তে ব্যবহার করে quote()এবং এইভাবে স্পেসগুলি "+" হিসাবে এনকোড করে। এটিও মনে হয় যে ডাব্লু 3 সি সুপারিশটি এখানে হিসাবে "+": http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1

এবং প্রকৃতপক্ষে, স্পেসগুলি এনকোড করতে কী ব্যবহার করতে হবে সে সম্পর্কে পাইথনের নিজস্ব ইস্যু ট্র্যাকারের এই আকর্ষণীয় বিতর্কটি অনুসরণ করতে পারেন: http://bugs.python.org/issue13866

সম্পাদনা # 2:

আমি বুঝতে পারি যে "" "এনকোডিংয়ের সর্বাধিক সাধারণ উপায়" + "হিসাবে রয়েছে তবে এটি একটি নোট, এটি কেবল আমারই হতে পারে তবে আমি এটিকে কিছুটা বিভ্রান্ত মনে করি:

import urllib
print(urllib.urlencode({' ' : '+ '})

>>> '+=%2B+'

হার্ডকোডিং নয়। শূন্যস্থানযুক্ত আমার ইউআরএলগুলি দেখতে কেমন হবে তা একটি নান্দনিক দৃষ্টিভঙ্গি থেকে নির্ধারণের চেষ্টা করা হচ্ছে।
বিসি।

হাই, আমিও বিভ্রান্ত হয়ে পড়েছি, যখন ব্যবহারকারী এইচটিএমএল ফর্ম জমা দেবেন, ফর্মটি স্থানটিকে কীভাবে এনকোড করবে? কোন চরিত্রের সাথে? ফলাফল কি ব্রাউজার-নির্ভর?
GMsoF

1
এবং URLEncoder.encode()জাভা পদ্ধতিটি এটিকে রূপান্তরিত করে +
рüффп

এবং তারপরে প্রশ্ন উত্থাপিত হয় যে কীভাবে কোনও পোষ্ট অনুরোধের শরীরে এনকোডিংয়ের চিকিত্সা করা যায়: "বিষয়বস্তুর ধরণ: অ্যাপ্লিকেশন / x-www-form-urlencoded" যেখানে প্যারামিটারগুলি "a = b & c = d" আকারে রয়েছে, তবে কোনও URL এ নেই, কেবলমাত্র "দস্তাবেজ" এর মূল অংশ body তারা এই সমস্যাটি থেকে একটি সত্যিকারের জগাখিচুড়ি করেছে এবং এর যথাযথ উত্তর খুঁজে পাওয়া কঠিন difficult
fyngyrz

পার্লস ইউরি_সেসকেপ () তাদের% 20 হিসাবে গণ্য করে
কোনও কোনও

16

একটি URL কেবলমাত্র "অ্যাপ্লিকেশন / x-www-form-urlencoded" কন্টেন্ট-টাইপ কী-মান জুটির প্রশ্নের URL অংশে "+" এ এনকোড করা যেতে পারে। আমার মতে, এটি একটি মেই, না জরুরী। বাকি ইউআরএলগুলিতে এটি% 20 হিসাবে এনকোড করা আছে।

আমার মতে, ইউআরএল-এর কোয়েরি অংশে এমনকি "+" হিসাবে নয়,% 20 হিসাবে সর্বদা স্থানগুলি এনকোড করা ভাল, কারণ এটি এইচটিএমএল স্পেসিফিকেশন (আরএফসি-1866) নির্দিষ্ট করে যে স্পেস অক্ষরগুলি "" হিসাবে এনকোড করা উচিত + "অ্যাপ্লিকেশন / x-www-form-urlencoded" বিষয়বস্তু-টাইপ কী-মান জোড় (অনুচ্ছেদ 8.2.1 দেখুন। সাবপাড়া 1।)

ফর্ম ডেটা এনকোডিংয়ের এই উপায়টি পরবর্তী এইচটিএমএল স্পেসিফিকেশনেও দেওয়া হয়। উদাহরণস্বরূপ, এইচটিএমএল 4.01 নির্দিষ্টকরণে অ্যাপ্লিকেশন / x-www-form-urlencoded সম্পর্কিত প্রাসঙ্গিক সন্ধান করুন so

এখানে ইউআরএল-এর একটি নমুনা স্ট্রিং রয়েছে যেখানে এইচটিএমএল স্পেসিফিকেশনটি এনকোডিং স্পেসকে প্লাস হিসাবে মঞ্জুরি দেয়: " http://example.com/over/there?name=foo+bar "। সুতরাং, কেবল "?" এর পরে, স্পেসগুলি প্লাস দ্বারা প্রতিস্থাপন করা যেতে পারে । অন্যান্য ক্ষেত্রে, স্পেসগুলি% 20 এ এনকোড করা উচিত। তবে যেহেতু প্রসঙ্গটি সঠিকভাবে নির্ধারণ করা শক্ত, তাই স্পেসগুলি কখনই "+" হিসাবে এনকোড না করা এটি সেরা অনুশীলন।

আমি আরএফসি -৯৯,, পৃষ্ঠা ২.৩-এ সংজ্ঞায়িত "অনারক্ষিত" ব্যতীত সমস্ত চরিত্রকে শতাংশ-এনকোড করার পরামর্শ দেব

unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"

বাস্তবায়নটি আপনি যে প্রোগ্রামিং ভাষাটি বেছে নিয়েছিলেন তার উপর নির্ভর করে।

যদি আপনার URL টিতে জাতীয় অক্ষর থাকে তবে প্রথমে সেগুলি ইউটিএফ -8 এ এনকোড করুন এবং তারপরে ফলাফলটি শতাংশ-এনকোড করুন।


1
যদি অনুরোধ করা সংস্থানটি এইচটিএমএল না হয় তবে কারও কেন HTML স্পেসিফিকেশন সম্পর্কে যত্ন নেওয়া উচিত? আমি এমন কিছু ওয়েব এপিআইতে "+" দেখেছি যা এইচটিএমএলের সাথে সাড়া দেয় না যেমন আপনি একটি পিডিএফ অনুরোধ করছেন request আমি এটিকে ভুল বলে বিবেচনা করি যে তারা "% 20" ব্যবহার করবেন না।
অবিশ্বাস্য জানুয়ারী

@ থ্রিঙ্ক্রেডিবলজান, আমি আপনার সাথে একমত আমার উত্তরটি এটাই।
ম্যাক্সিম ম্যাসিউটিন

1
@ ম্যাক্সিমমাসিউটিন যখন আপনার উত্তরটি বলে "এটি একটি মেই, একটি মুস্ট নয়", আপনি কোন বৈশিষ্টটির কথা উল্লেখ করছেন? আমি একটি মেপ হিসাবে এটি আছে একটি অনুমান খুঁজে পেতে সংগ্রাম করছি। ইন w3.org/TR/1999/REC-html401-19991224/interact/... ব্যবহার + '(কোয়েরি বিভাগে) বৈশিষ্ট একটি' আবশ্যক 'বিভাগে মধ্যে।
জোসেফ এইচ

2
@ জোসেফ এইচ - আপনার নোটের জন্য আপনাকে ধন্যবাদ। এটি মায় সম্পর্কে আমার পার্সোনাল মতামত। আমি পোস্টটি সম্পাদনা করেছি। আমার অভিপ্রায়টি হ'ল এই যে এইচটিএমএল স্পেসিফিকেশনটি আপনি "+" সংজ্ঞায়িত করেছেন তবে ইউআরএল প্রসঙ্গে অন্যান্য নিয়মগুলি প্রযোজ্য যা এনকোডিং স্পেসগুলিকে% 20 হিসাবেও অনুমতি দেয়।
ম্যাক্সিম ম্যাসিউটিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.