رمزگشایی URL (رمزگشایی درصدی) عکس رمزگذاری URL است: دنبالههای رمزگذاریشده با درصد را به کاراکترهای اصلیشان تبدیل میکند. هر بار که یک علامت درصد به دنبال دو رقم هگزادسیمال (%XX) ظاهر شود، با بایتی که XX نشان میدهد جایگزین میشود. بایتهای رمزگذاریشده متوالی برای بازسازی کاراکتر اصلی UTF-8 با هم ترکیب میشوند.
رمزگشایی URL یک کار روزانه برای توسعهدهندگانی است که با API، وباسکرپینگ، تحلیل لاگ و جریانهای احراز هویت کار میکنند. URLهای رمزگذاریشده برای ماشینها خوانا هستند اما برای انسانها مبهم — رمزگشایی آنها بلافاصله مسیرهای واقعی، جستجوهای query، مقاصد redirect و مقادیر پارامتر را آشکار میکند.
چرا از این ابزار استفاده کنید؟
به سرعت هر URL یا رشته query رمزگذاریشده با درصد را بخوانید — بدون نیاز به کنسول مرورگر، هیچ چیز به سرور ارسال نمیشود.
⚡
رمزگشایی آنی
هر URL یا پارامتر رمزگذاریشده را بچسبانید و نسخه قابل خواندن توسط انسان را فوراً ببینید. برای اشکالزدایی درخواستهای API و فایلهای لاگ عالی است.
🛡️
بازیابی خطا
برای ورودیهایی که شامل کاراکترهای Latin-1 رمزگذاریشده با درصد به روش قدیمی هستند و با decodeURIComponent شکست میخورند، به unescape() قدیمی بازمیگردد.
🔒
فقط سمت کلاینت
تمام رمزگشایی به صورت محلی در مرورگر شما انجام میشود. توکنها، رمزهای عبور و پارامترهای query خصوصی هرگز دستگاه شما را ترک نمیکنند.
🔁
پشتیبانی کامل از URL
URLهای کامل یا مقادیر پارامتر جداگانه را رمزگشایی کنید. این ابزار هم فاصلههای استاندارد %20 را مدیریت میکند و هم علامت + را به عنوان کاراکتر plus واقعی حفظ میکند.
نحوه استفاده از این رمزگشای URL آنلاین
بدون حساب کاربری، بدون نصب. رشته رمزگذاریشده با درصد خود را در فیلد ورودی بچسبانید و نتیجه رمزگشاییشده فوراً ظاهر میشود. همه چیز در مرورگر شما اجرا میشود — دادههای شما هرگز دستگاه شما را ترک نمیکنند.
1
URL یا رشته رمزگذاریشده خود را بچسبانید
هر رشته رمزگذاریشده با درصد را کپی کنید — یک URL از نوار آدرس مرورگر، یک پارامتر query از لاگهای سرور، یک پاسخ API یا یک مقصد redirect — و آن را در فیلد ورودی بچسبانید.
2
تشخیص خودکار فرمت
رمزگشا به طور خودکار هم رمزگذاری درصدی %XX و هم + به عنوان فاصله (application/x-www-form-urlencoded) را مدیریت میکند. نیازی به مشخص کردن دستی فرمت رمزگذاری نیست.
3
خروجی رمزگشاییشده را بررسی کنید
متن قابل خواندن توسط انسان فوراً ظاهر میشود. اگر ورودی شامل رمزگذاری تودرتو (رشتههای دوبار رمزگذاریشده) بود، رمزگشا یک لایه در هر بار حل میکند. برای دنبالههای %XX ناقص خطا نمایش داده میشود.
4
کپی یا رمزگذاری مجدد
روی Copy کلیک کنید تا رشته رمزگشاییشده را بردارید. نیاز دارید دوباره با تنظیمات متفاوت رمزگذاری کنید؟ با یک کلیک به ابزار URL Encoder بروید.
نحوه کار رمزگشایی
رمزگشا ورودی را برای دنبالههای % اسکن میکند، هر گروه دو رقم هگز را به مقدار بایت تبدیل میکند، دنبالههای بایت متوالی را گروهبندی میکند و آنها را به عنوان UTF-8 تفسیر میکند تا کاراکترهای Unicode نهایی تولید شوند.
مرجع سریع برای رایجترین دنبالههای رمزگذاریشده با درصد:
رمزگذاریشده
کاراکتر
کجا میبینید
%20
space
path segments, query values
%2B
+
literal plus (not a space in query)
%2F
/
slash inside a path component
%3F
?
literal question mark in a value
%23
#
literal hash in a value
%26
&
literal ampersand in a value
%3D
=
literal equals sign in a value
%40
@
at sign in username / password
%3A
:
colon inside a path segment
%25
%
literal percent sign
%2C
,
comma in path or query
%5B
[
opening bracket
%5D
]
closing bracket
%7B
{
curly brace in template literals
%7D
}
curly brace in template literals
موارد استفاده رایج
اشکالزدایی درخواستهای API
یک URL از لاگهای شبکه DevTools مرورگر کپی کنید و آن را رمزگشایی کنید تا مقادیر واقعی پارامتر query را ببینید — به خصوص زمانی که ابزارها یا کتابخانههای خودکار پارامترها را رمزگذاری کردهاند.
خواندن فایلهای لاگ
لاگهای دسترسی سرور وب و لاگهای برنامه URLها را در شکل رمزگذاریشده ذخیره میکنند. آنها را رمزگشایی کنید تا مسیرهای واقعی درخواستشده، عبارات جستجو و مقادیر پارامتر را بیابید.
بررسی ریدایرکتها
callback های OAuth، ریدایرکتهای SSO و URLهای ردیابی لینک اغلب پارامترهای redirect_uri یا next به شدت رمزگذاریشده دارند. URL را رمزگشایی کنید تا مقصد مورد نظر را ردیابی کنید.
پردازش payload های Webhook
بدنههای Webhook ارسالشده به صورت application/x-www-form-urlencoded (Stripe، Twilio، GitHub) به صورت رشتههای رمزگذاریشده با درصد میرسند. آنها را رمزگشایی کنید تا مقادیر واقعی فیلدها را بخوانید.
استخراج کوئریهای جستجو
URLهای analytics و هدرهای referrer شامل کوئری جستجوی اصلی کاربر هستند که در پارامتر q= رمزگذاریشده است. آن را رمزگشایی کنید تا عبارات جستجوی واقعی را نمایش یا تحلیل کنید.
مهندسی معکوس URLها
هنگام یکپارچهسازی با API های شخص ثالث یا اسکرپینگ، URLهایی که با آنها مواجه میشوید اغلب شامل بخشهای مسیر و پارامترهای رمزگذاریشده هستند. آنها را رمزگشایی کنید تا ساختار URL را درک کنید و درخواستها را بازتولید کنید.
اشتباهات رایج
رایجترین اشتباهات هنگام رمزگشایی رشتههای رمزگذاریشده با درصد:
✕
اشتباه گرفتن + با %20
در دادههای application/x-www-form-urlencoded (ارسال فرمهای HTML)، + نشاندهنده فاصله است. اما در مسیر خام URL یا مقداری که با encodeURIComponent رمزگذاری شده، + یک علامت plus واقعی است. decodeURIComponent علامت + را به فاصله تبدیل نمیکند — برای دادههای فرم از URLSearchParams یا unquote_plus استفاده کنید.
✕
رشتههای دوبار رمزگذاریشده
اگر رشتهای دوبار رمزگذاری شده باشد، یک بار رمزگشایی هنوز علامتهای درصد باقی میگذارد: %2520 به %20 رمزگشایی میشود، نه فاصله. برای دریافت مقدار اصلی دوباره رمزگشایی کنید. مراقب این مورد در لاگها، پراکسیها و میانافزارهایی باشید که دادههای از قبل رمزگذاریشده را دوباره رمزگذاری میکنند.
✕
دنبالههای درصد ناقص
یک % تنها یا یک % به دنبال کاراکترهای غیر هگز (مثلاً %GG یا % 2) نامعتبر است و خطای URIError ایجاد میکند. همیشه ورودی را اعتبارسنجی کنید یا رمزگشایی را در try/catch بپوشانید.
✕
عدم تطابق کدگذاری (Latin-1 در مقابل UTF-8)
سیستمهای قدیمی (urlencode PHP، ASP کلاسیک) کاراکترها را به صورت بایتهای Latin-1 رمزگذاری میکردند. رشتهای که با Latin-1 رمزگذاری شده ممکن است با رمزگشای UTF-8 به درستی رمزگشایی نشود. اگر کاراکترهای نامفهوم میبینید، مسیر unescape() قدیمی را امتحان کنید یا کدگذاری اصلی را تشخیص دهید.
نمونههای کد
نحوه رمزگشایی URL رشتهها در زبانها و محیطهای محبوب:
JavaScript (browser / Node.js)
// Decode a percent-encoded component
decodeURIComponent('hello%20world%20%26%20more') // → "hello world & more"
// Decode a full URL (leaves structure characters encoded)
decodeURI('https://example.com/path?q=hello%20world') // → "https://example.com/path?q=hello world"
// Parse a query string (handles + as space automatically)
const params = new URLSearchParams('q=hello+world&lang=en')
params.get('q') // → "hello world"
const url = new URL('https://example.com/search?q=hello%20world%20%26%20more')
url.searchParams.get('q') // → "hello world & more"
url.pathname // → "/search"
CLI (bash)
# Decode with Python one-liner
python3 -c "from urllib.parse import unquote; print(unquote('hello%20world'))"
# Decode with Node.js
node -e "console.log(decodeURIComponent('hello%20world%20%26'))"
رمزگشای URL در مقابل روشهای جایگزین
ابزارهای متعددی میتوانند رشتههای رمزگذاریشده با درصد را رمزگشایی کنند، اما از نظر وضوح، حریم خصوصی و سهولت با هم تفاوت دارند.
این ابزار
مبتنی بر مرورگر، آنی، خصوصی. رمزگذاری %XX، + به عنوان فاصله، Unicode و دنبالههای ناقص را مدیریت میکند. هیچ دادهای به هیچ سروری ارسال نمیشود.
نوار آدرس مرورگر
مرورگرها URLها را برای نمایش رمزگشایی میکنند اما نه همیشه به طور کامل — برخی کاراکترهای رمزگذاریشده در نوار آدرس قابل مشاهده باقی میمانند. برای بررسی مقادیر پارامتر جداگانه مفید نیست.
DevTools / curl -v
DevTools مرورگر و curl URLهای خام و رمزگشاییشده را در درخواستهای شبکه نشان میدهند. برای اشکالزدایی مفید است اما نیاز به تغییر ابزار و دانستن جای نگاه کردن دارد.
سوالات متداول
تفاوت بین decodeURIComponent و decodeURI چیست؟
decodeURIComponent تمام دنبالههای رمزگذاریشده با درصد از جمله کاراکترهای رزرو شده را رمزگشایی میکند (%2F → /، %3F → ?، و غیره). decodeURI فقط دنبالههایی را رمزگشایی میکند که کاراکتری با معنای خاص در URL تولید نمیکنند — %2F، %3F، %23 و سایر کاراکترهای ساختاری را رمزگذاریشده نگه میدارد. از decodeURIComponent برای مقادیر پارامتر استفاده کنید؛ از decodeURI فقط زمانی استفاده کنید که یک URL کامل دارید و میخواهید ساختار آن را حفظ کنید.
چرا خطای URIError: malformed URI میبینم؟
این خطا از decodeURIComponent زمانی رخ میدهد که ورودی شامل % بدون دو رقم هگز معتبر بعد از آن باشد، یا زمانی که یک دنباله چند بایتی UTF-8 ناقص باشد (مثلاً %E2 بدون %82%AC بعدی). علامتهای درصد اضافی را قبل از رمزگشایی حذف یا escape کنید.
آیا رمزگشایی + را به عنوان فاصله مدیریت میکند؟
خیر — decodeURIComponent علامت + را به عنوان یک علامت plus واقعی در نظر میگیرد، نه فاصله. قرارداد + → فاصله فقط برای دادههای application/x-www-form-urlencoded (ارسال فرمهای HTML) اعمال میشود. برای رمزگشایی دادههای form-encoded، از URLSearchParams (مرورگر/Node) یا urllib.parse.unquote_plus (Python) استفاده کنید.
آیا رمزگشایی URL سمت کلاینت ایمن است؟
بله — رمزگشایی URL یک تبدیل خالص بدون هیچ درخواست شبکهای است. تمام مرورگرهای مدرن شامل decodeURIComponent و decodeURI به عنوان توابع بومی هستند. این ابزار رمزگشایی را کاملاً در مرورگر شما انجام میدهد؛ هیچ دادهای ارسال نمیشود.
چطور یک URL که چندین بار رمزگذاری شده را رمزگشایی کنم؟
آن را چندین بار رمزگشایی کنید تا خروجی ثابت شود (دیگر دنبالههای % حل نشده). این اتفاق زمانی میافتد که یک URL از قبل رمزگذاریشده از طریق یک رمزگذار دیگر عبور کند. هر بار رمزگشایی یک لایه رمزگذاری را حذف میکند.
%XX نشاندهنده چیست؟
دو کاراکتر بعد از % رقمهای هگزادسیمال هستند که یک مقدار بایت تکی (00–FF) را نشان میدهند. برای کاراکترهای ASCII، این بایت کد ASCII کاراکتر است: %41 = 65 = 'A'. برای کاراکترهای غیر ASCII، چندین دنباله %XX دنباله بایت UTF-8 کاراکتر را نشان میدهند: علامت یورو € به صورت %E2%82%AC است (سه بایت: 0xE2، 0x82، 0xAC).
مرورگر هنگام ارسال فرمهای HTML از چه کدگذاری استفاده میکند؟
فرمهای HTML با method=GET فیلدها را با استفاده از کدگذاری application/x-www-form-urlencoded به URL اضافه میکنند؛ فاصلهها به جای %20 با + جایگزین میشوند و سایر کاراکترهای خاص به صورت درصدی کدگذاری میشوند. گزینه + → فاصله در ابزار URL Decode این فرمت را پردازش میکند. فرمهایی با method=POST و enctype=application/x-www-form-urlencoded از همین طرح در بدنه درخواست استفاده میکنند.
آیا محدودیت اندازه برای رمزگشایی وجود دارد؟
هیچ محدودیت سمت سرور — این ابزار کاملاً در مرورگر شما اجرا میشود. محدودیتهای عملی به حافظه مرورگر شما بستگی دارد. برای رشتههای رمزگذاریشده بسیار بزرگ یا پردازش دستهای، از decodeURIComponent در یک اسکریپت استفاده کنید.