RevealTheme logo

کدگذار و کدگشای URL

متن را به کدگذاری امن برای URL (کدگذاری درصدی) و برعکس تبدیل کنید. مفید برای رشته‌های پرس‌وجو، تغییر مسیرها و جریان‌های OAuth.

نحوه استفاده از این ابزار

  1. 1

    Choose a mode with the Encode or Decode button at the top (Encode is selected by default).

  2. 2

    Type or paste your text into the input box — a raw value to encode, or a percent-encoded string to decode.

  3. 3

    Click Run to convert the text; the result appears in the monospace box below.

  4. 4

    Copy the output from the result box, or switch modes and click Run again to reverse the conversion.

کدگذاری URL چیست و چه زمانی به آن نیاز دارید؟

کدگذاری URL (که «کدگذاری درصدی» نیز نامیده می‌شود و در RFC 3986 مشخص شده است) فرایند تبدیل کاراکترهایی است که در URLها معنای خاصی دارند —یا کاراکترهایی که مستقیماً در URLها امن نیستند— به یک دنباله گریز هگزادسیمال '%XX'. مشخصات URL کاراکترهای خاصی را با معنای ساختاری رزرو می‌کند: '?' رشته پرس‌وجو را آغاز می‌کند، '#' بخش fragment را آغاز می‌کند، '&' پارامترهای پرس‌وجو را جدا می‌کند، '/' بخش‌های مسیر را جدا می‌کند و غیره. اگر ورودی کاربر شامل یکی از این کاراکترها باشد و آن را همان‌طور که هست در یک URL جای دهید، تجزیه‌گر آن را اشتباه تفسیر می‌کند. کدگذاری URL با جایگزین کردن هر کاراکتر رزروشده یا ناامن با نمایش هگزادسیمال بایتی آن که با '%' آغاز می‌شود، از این مشکل جلوگیری می‌کند. یک فاصله به %20 تبدیل می‌شود، '&' به %26 و '=' به %3D. کاراکترهای غیر ASCII (سیریلیک، چینی، اموجی) به دنباله‌های چندبایتی UTF-8 تبدیل می‌شوند که هر بایت آن به‌صورت درصدی کدگذاری می‌شود. مرورگرها هنگام کلیک روی یک پیوند این کار را به‌طور خودکار انجام می‌دهند، اما هر زمان که یک URL را از طریق کد می‌سازید —هنگام ایجاد یک پرس‌وجوی جستجو، یک مقصد تغییر مسیر، یک callback مربوط به OAuth یا یک امضای webhook— باید ابتدا مقادیر ارائه‌شده توسط کاربر را کدگذاری کنید. این ابزار از همان توابع encodeURIComponent / decodeURIComponent استفاده می‌کند که کد JavaScript شما استفاده می‌کند، بنابراین رفتار آن دقیقاً با محیط تولید (production) مطابقت دارد.

موارد استفاده رایج

  • عبارت‌های جست‌وجوی کاربر را پیش از افزودن به URL جست‌وجو رمزگذاری کنید (q=user+input?).

  • پارامتر OAuth با نام redirect_uri را به‌سلامت به سرور مجوزدهی منتقل کنید.

  • URLهای webhook بسازید که محتوای JSON رمزگذاری‌شده را در رشته‌ی پرس‌وجو (query string) دربردارند.

  • یک URL با نام 'returnTo' را رمزگذاری کنید تا هنگام عبور از میان URLهای دیگر سالم بماند.

  • مقادیر رمزگذاری‌شده‌ای را که پس از ارسال فرم در نوار آدرس مرورگر می‌بینید رمزگشایی کنید.

  • بررسی کنید یک URL ناقص چگونه تجزیه می‌شود؛ یک نویسه‌ی خاص را رمزگذاری کنید و نتیجه را ببینید.

پرسش‌های متداول

چه زمانی باید یک URL را کدگذاری کنم؟
همیشه مقادیر ارائه‌شده توسط کاربر را پیش از قرار دادن در یک URL کدگذاری کنید: پارامترهای پرس‌وجو، بخش‌های مسیر یا fragmentها. کدگذاری نکردن یکی از رایج‌ترین منابع خطاهای ظریف است: مقدار 'گربه‌ها و سگ‌ها' یک رشته پرس‌وجو را خراب می‌کند تا زمانی که به‌صورت 'گربه‌ها%20%26%20سگ‌ها' کدگذاری شود.
تفاوت بین encodeURI و encodeURIComponent چیست؟
encodeURI برای URLهای کامل است: کاراکترهای ساختاری مانند '/'، '?'، '&'، '=' را دست‌نخورده باقی می‌گذارد زیرا در یک URL معنا دارند. encodeURIComponent برای بخش‌های URL است (مقادیر پرس‌وجو، بخش‌های مسیر): هر چیزی را که الفبایی‌عددی نباشد کدگذاری می‌کند. از encodeURIComponent روی مقادیر پرس‌وجوی منفرد استفاده کنید؛ هرگز از encodeURI روی یک مقدار پرس‌وجوی ارائه‌شده توسط کاربر استفاده نکنید (آن '&' را گریز نمی‌دهد و رشته پرس‌وجوی شما را خراب می‌کند).
Base64 امن برای URL در مقابل کدگذاری URL چیست؟
این‌ها مفاهیم متمایزی هستند. کدگذاری URL (این ابزار) کاراکترهای خاص را کاراکتر به کاراکتر جایگزین می‌کند. Base64 امن برای URL یک گونه از Base64 است که به‌جای '+' و '/' از '-' و '_' استفاده می‌کند، به‌طوری که خروجی بدون کدگذاری اضافی، خود از پیش برای URL امن است.
چرا گاهی '+' به‌صورت فاصله کدگشایی می‌شود؟
در application/x-www-form-urlencoded (ارسال فرم‌ها)، '+' مخفف یک فاصله است. بیشتر کدگشاها این را حفظ می‌کنند. در تجزیه مدرن URI، '%20' کدگذاری درست فاصله است. decodeURIComponent با '+' به‌عنوان یک '+' تحت‌اللفظی برخورد می‌کند؛ برای تبدیل '+' به فاصله از decodeURI یا یک کدگشای فرم استفاده کنید.
کاراکترهای غیر ASCII چگونه کدگذاری می‌شوند؟
ابتدا به بایت‌های UTF-8 تبدیل می‌شوند و سپس هر بایت به‌صورت درصدی کدگذاری می‌شود. بنابراین 'café' به 'caf%C3%A9' تبدیل می‌شود: 'é' دو بایت UTF-8 است (0xC3 0xA9). این ابزار UTF-8 را به‌درستی مدیریت می‌کند؛ برخی ابزارهای قدیمی با استفاده از Latin-1 کدگذاری می‌کنند که خروجی متفاوتی تولید می‌کند.
آیا کدگذاری URL همان کدگذاری موجودیت‌های HTML است؟
خیر. کدگذاری URL (%XX) کاراکترها را برای URLها گریز می‌دهد. کدگذاری موجودیت‌های HTML (&، <) کاراکترها را برای نشانه‌گذاری HTML گریز می‌دهد. زمینه‌ها متفاوت‌اند؛ کدگذاری یکی در زمینه دیگری یک خطای رایج XSS است.

ابزارهای مرتبط