কোনও ইউআরএল-এ কোনও স্থান কখন এনকোড করা থাকে +
এবং কখন এটিকে এনকোড করা হয় %20
?
কোনও ইউআরএল-এ কোনও স্থান কখন এনকোড করা থাকে +
এবং কখন এটিকে এনকোড করা হয় %20
?
উত্তর:
উইকিপিডিয়া থেকে (জোর দেওয়া এবং লিঙ্ক যুক্ত):
এইচটিএমএল ফর্মগুলিতে প্রবেশ করা ডেটা যখন জমা দেওয়া হয়, ফর্ম ফিল্ডের নাম এবং মানগুলি এনটিড করে সার্ভারের কাছে এইচটিটিপি অনুরোধ বার্তায় জিইটি বা পোষ্ট পদ্ধতি ব্যবহার করে বা orতিহাসিকভাবে ইমেলের মাধ্যমে প্রেরণ করা হয়। ডিফল্টরূপে ব্যবহৃত এনকোডিংটি সাধারণ ইউআরআই শতাংশ-এনকোডিং নিয়মের একেবারে প্রাথমিক সংস্করণের উপর ভিত্তি করে, অনেকগুলি পরিবর্তন যেমন নিউলাইনের নরমালাইজেশন এবং "% 20" এর পরিবর্তে স্পেসগুলি "+" দিয়ে প্রতিস্থাপন করে। এইভাবে এনকোড করা মাইম টাইপের ডেটা হ'ল অ্যাপ্লিকেশন / এক্স-www-ফর্ম-urlencoded এবং এটি বর্তমানে HTML এবং এক্স ফোর্মের নির্দিষ্টকরণগুলিতে (এখনও খুব পুরানো পদ্ধতিতে) সংজ্ঞায়িত।
সুতরাং, ইউআরএলগুলিতে ফর্ম ডেটা ব্যবহার করার সময় পরিবর্তিত ফর্মটিতে আসল শতাংশ এনকোডিং %20
ব্যবহার করে +
। সুতরাং আপনি সম্ভবত +
একটি এর পরে ক্যোরি স্ট্রিংয়ের URL গুলিতে দেখতে পাচ্ছেন ?
।
multipart/form-data
মাইম এনকোডিং ব্যবহার করে; application/x-www-form-urlencoded
ব্যবহার করে +
এবং সঠিকভাবে এনকোডেড ইউআরআই ব্যবহার করে %20
।
http://www.bing.com/search?q=hello+world
এবং নামে স্থান সহ একটি সংস্থানhttp://camera.phor.net/cameralife/folders/2012/2012-06%20Pool%20party/
mailto:support@example.org?subject=I%20need%20help
,। যদি আপনি এটির সাথে + চেষ্টা করে থাকেন তবে ইমেলটি ফাঁকের পরিবর্তে + এস দিয়ে খোলা হবে।
এই বিভ্রান্তি হ'ল ইউআরএলগুলি এখনও অবধি 'ভাঙ্গা'।
উদাহরণস্বরূপ " 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
আগে ?
এবং +
পরে থাকা উচিত ।
key1=value1&key1=value2
যেখানে কী এবং মানগুলি যে কোনও নিয়ম encodeURIComponent
অনুসরণ করে এনকোড করা হয় তবে এএএফএইকে ক্যোয়ারী অংশের বিষয়বস্তুগুলি সম্পূর্ণ অ্যাপ্লিকেশনটিতে 100% অবধি রয়েছে। অন্যথায় এটি প্রথমে যায় #
কোনও সরকারী এনকোডিং নেই।
আমি সুপারিশ করব %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+'
URLEncoder.encode()
জাভা পদ্ধতিটি এটিকে রূপান্তরিত করে +
।
একটি 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 এ এনকোড করুন এবং তারপরে ফলাফলটি শতাংশ-এনকোড করুন।