মূল অংশে যান

URL ডিকোড করুন

%E2%9C%93-কে আবার ✓-তে ফেরান। দুবার এনকোড করা স্ট্রিং, ফর্ম এনকোডিং আর আধভাঙা ইনপুট — সবই বাতিল না করে সামলানো হয়। কিছুই সংরক্ষণ করা হয় না।

  • কখনো সংরক্ষণ করা হয় না
  • কোনো লাইন নেই, অপেক্ষা নেই
  • সাইনআপ নেই, ওয়াটারমার্ক নেই
ডিকোড করা

ডিকোড করা এখানে দেখা যাবে।

যেভাবে কাজ করে

1

এনকোড করা টেক্সট পেস্ট করুন

পুরো একটি URL, একটি কুয়েরি স্ট্রিং, বা শুধু একটি মান।

2

দরকার হলে ধরন বেছে নিন

সাধারণ ডিকোডিং, অথবা ফর্ম ডিকোডিং, যেখানে + মানে স্পেস। নিশ্চিত না হলে, দুটির ফল কোথায় আলাদা, পেজটি দেখিয়ে দেয়।

3

ফলাফল কপি করুন

টেক্সট দুবার এনকোড করা হলে আবার ডিকোড করুন — এটি খুবই সাধারণ, আর একবার দেখলে সহজেই চেনা যায়।

যে দ্ব্যর্থতা কেউ আপনার হয়ে মেটাতে পারে না

ডিকোড করা যান্ত্রিকভাবে সহজ — প্রতিটি %-এর পরের দুটি হেক্স ডিজিট খুঁজে সেটিকে আবার একটি বাইটে ফেরানো, তারপর বাইটগুলোকে UTF-8 হিসেবে পড়া — আর এতে সত্যিকারের দ্ব্যর্থতা ঠিক একটিই। প্লাস চিহ্নের মানে হতে পারে স্পেস, আবার হতে পারে প্লাসই। জমা দেওয়া ফর্মে এর মানে স্পেস — এমন এক প্রথা অনুযায়ী, যা ওয়েবের নিজস্ব URL স্পেসিফিকেশনের চেয়েও পুরোনো। পাথ সেগমেন্টে এটি আক্ষরিক একটি অক্ষর। কোনটি প্রযোজ্য, টেক্সট নিজে তা বলে না, তাই পেজটি একটি বেছে নিয়ে নীরবে ভুল করার বদলে দুটি অর্থই আপনাকে দেখায় — যা সবচেয়ে জরুরি সেখানে, যেখানে ক্ষতি সবচেয়ে বেশি: ইমেইল ঠিকানা বা base64 মান, যেখানে প্লাস আসল ডেটা।

ASCII-এর বাইরের টেক্সট প্রতিটি অক্ষরের জন্য কয়েকটি পার্সেন্ট সিকোয়েন্স হয়ে আসে, কারণ এনকোডিং অক্ষরের ওপর নয়, UTF-8 বাইটের ওপর কাজ করে: অ্যাকসেন্টযুক্ত একটি অক্ষর দুটি, বেশির ভাগ চিহ্ন তিনটি, একটি ইমোজি চারটি। বৈধ UTF-8 নয় এমন সিকোয়েন্স ডিকোড করলে রিপ্লেসমেন্ট ক্যারেক্টার আসে — সাধারণত এর মানে টেক্সটটি অন্য কোনো ক্যারেক্টার সেট থেকে এনকোড করা, অথবা কোনো অক্ষরের মাঝপথে কেটে গেছে।

দুবার ডিকোড করা শুধু ভুল নয়, নিরাপত্তার বাগ। কোনো মান ডিকোড করে যাচাই করার পর আবার ডিকোড করলে আক্রমণকারী যাচাই থেকে অক্ষর লুকাতে পারে: %252e%252e%252f “../” খোঁজা ফিল্টার পার হয়ে যায়, কারণ এক দফার পর এটি থাকে %2e%2e%2f, আর দ্বিতীয় দফার পর হয়ে যায় ঠিক সেই ট্রাভার্সাল, যা আটকানোর জন্যই ফিল্টারটি ছিল। ঠিক একবার ডিকোড করুন, তারপর যাচাই করুন — কখনো উল্টো ক্রমে নয়।

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

অন্য কিছু দরকার হলে

কোডে ডিকোডারকে এনকোডারের সঙ্গে মিলতে হবে। JavaScript-এ আছে decodeURIComponent; Python ঠিক এই প্লাস চিহ্নের প্রশ্নেই unquote আর unquote_plus আলাদা রেখেছে; PHP-তে একই কারণে আছে rawurldecode ও urldecode। আরও ভালো হয় URL টাইপ বা কুয়েরি-স্ট্রিং পার্সারকে কাজটি করতে দিলে — বেশির ভাগ ফ্রেমওয়ার্ক প্যারামিটার আপনার হয়ে ডিকোড করে দেয়, আর তারপর আবার ডিকোড করলেই ওপরের দ্বিগুণ-ডিকোডিং বাগটি তৈরি হয়।

কোনো মান ডিকোড করার বদলে একটি লম্বা URL পরীক্ষা করতে হলে ডিকোডারের চেয়ে পার্সার ভালো: python -c "import urllib.parse,sys; print(urllib.parse.urlparse(sys.argv[1]))" একটি ঠিকানাকে তার অংশগুলোতে ভাগ করে, ফলে কিছু ডিকোড করার আগেই দেখতে পান কোন অংশ কোনটি — লিংক ঠিকমতো কাজ না করলে সাধারণত আসল প্রশ্ন এটিই।

সাধারণ প্রশ্নোত্তর

ডিকোড করার পরও আমার টেক্সটে %25 রয়ে গেছে

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

“+” কি স্পেস হওয়া উচিত?

তা নির্ভর করে স্ট্রিংটি কোথা থেকে এসেছে তার ওপর — এ কারণেই এটি অনুমান নয়, আপনার বেছে নেওয়ার বিষয়। application/x-www-form-urlencoded বডিতে — অর্থাৎ জমা দেওয়া HTML ফর্মে — + মানে স্পেস। পাথ সেগমেন্টে, বা যে ডেটা শুধু URL দিয়ে পাঠানো হয়েছে তাতে, + আক্ষরিক প্লাস অক্ষর, আর একে স্পেস বানালে মানটি নষ্ট হয়ে যায়। Base64 স্ট্রিংয়েই ক্ষতিটা সবচেয়ে বেশি: এতে আসল + অক্ষর থাকে, আর ফর্ম-ডিকোড করলে এটি নষ্ট হয়ে যায়।

ভাঙা স্ট্রিং হলে কী হয়?

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

আমার টেক্সট কি কোথাও সংরক্ষণ করা হয়?

না। কিছুই সংরক্ষণ করা হয় না এবং কোনো রিকোয়েস্টও পাঠানো হয় না। পেজ লোড হওয়ার পর ইন্টারনেট সংযোগ বিচ্ছিন্ন করলেও এটি কাজ করতে থাকে।

পুরো একটি URL কি একবারে ডিকোড করা যায়?

হ্যাঁ। পুরোটা পেস্ট করুন — কাঠামো পড়ার উপযোগী থাকে আর শুধু এনকোড করা অংশগুলো আবার টেক্সটে ফেরে, ফলে কয়েকটি এনকোড করা প্যারামিটারসহ একটি লম্বা URL সত্যিই পড়ার মতো হয়ে যায়।

জেনে রাখুন: প্লাস চিহ্নের মানে দ্ব্যর্থক: কুয়েরি স্ট্রিংয়ে এর মানে স্পেস, আর পাথে এর মানে আক্ষরিক প্লাস। পেজটি অনুমান না করে দুইভাবেই ডিকোড করে এবং কোনটি কী, তা দেখিয়ে দেয়। যে টেক্সট কখনো পার্সেন্ট-এনকোড করা হয়নি, তা বিকৃত না হয়ে অপরিবর্তিত ফেরত আসে।

এই টুলটি আপনার ওয়েবসাইটে যোগ করুন

যেকোনো ব্লগ, ক্লাসের পেজ বা হেল্প আর্টিকেলের জন্য ফ্রি। একটি স্নিপেট পেস্ট করলেই আপনার ভিজিটররা আপনার পেজেই এটি ব্যবহার করতে পারবেন।