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

متن را برای URLها و رشته‌های کوئری percent-encode کنید، URLهای کدگذاری‌شده را رمزگشایی کنید و هر URL را همراه با پارامترهای کوئری رمزگشایی‌شده به اجزایش تقسیم کنید.

اجرا در مرورگر شمابدون ثبت‌نامبدون آپلود

کدگذاری‌شده

نحوهٔ استفاده از کدگذاری / رمزگشایی URL

  1. کدگذاری یا رمزگشایی را انتخاب کنید.
  2. هنگام کدگذاری، برای یک مقدار کوئری یا بخش مسیر مؤلفه، برای حفظ ساختار URL گزینهٔ URL کامل، یا گزینهٔ دادهٔ فرم را برای application/x-www-form-urlencoded انتخاب کنید.
  3. متن خود را جای‌گذاری کنید. نتیجه فوراً ظاهر می‌شود؛ escapeهای نادرست با موقعیتشان گزارش می‌شوند.
  4. یک URL کامل را در تجزیه‌گر URL جای‌گذاری کنید تا میزبان، مسیر، فرگمنت و همهٔ پارامترهای کوئری رمزگشایی‌شده را ببینید.

URL encoding چیست؟

URLها فقط می‌توانند مجموعهٔ محدودی از کاراکترهای ASCII را داشته باشند (RFC 3986). هر چیز دیگر، از جمله فاصله‌ها، حروف غیرانگلیسی و کاراکترهایی که معنای خاص دارند مانند &، ? و #، به‌صورت یک علامت درصد و دو رقم هگز برای هر بایت UTF-8 نوشته می‌شود. فاصله به %20 و é به %C3%A9 تبدیل می‌شود.

encodeURIComponent در برابر encodeURI

تابعدست‌نخورده می‌گذاردکاربرد
encodeURIComponentA-Z a-z 0-9 - _ . ~یک مقدار کوئری، بخش مسیر یا نام پارامتر
encodeURIبه‌علاوهٔ : / ? # [ ] @ ! $ & ' ( ) * + , ; =یک URL کامل که ساختارش باید حفظ شود

استفاده از encodeURI برای یک مقدار کوئری یک باگ کلاسیک است: & داخل مقدار escape نمی‌شود و پارامتر را به دو بخش تقسیم می‌کند. حالت مؤلفه در این ابزار برای سازگاری کامل با RFC 3986، ! ' ( ) * را هم escape می‌کند.

%20 یا + برای فاصله؟

در مسیرها فاصله باید %20 باشد. در ارسال فرم‌های HTML (application/x-www-form-urlencoded) و بسیاری از رشته‌های کوئری، فاصله به‌صورت + نوشته می‌شود. هنگام رمزگشایی، برای دادهٔ فرم + را فاصله در نظر بگیر را فعال کنید و وقتی علامت جمع واقعی اهمیت دارد، مانند jane+test@example.com، آن را غیرفعال کنید.

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

چرا هنگام رمزگشایی خطای «Malformed escape» می‌گیرم؟
پس از % باید دقیقاً دو رقم هگز بیاید. یک علامت درصد واقعی، مانند «50% تخفیف»، باید به‌صورت %25 کدگذاری می‌شد. خطا موقعیت دنبالهٔ نادرست را نشان می‌دهد.
«توالی بایت UTF-8 نامعتبر» یعنی چه؟
بایت‌ها با UTF-8 کدگذاری نشده‌اند؛ اغلب به این دلیل که متن توسط یک سیستم قدیمی با Latin-1 تولید شده است (مثلاً %E9 برای é به‌جای %C3%A9)، یا رشته وسط یک کاراکتر بریده شده است.
کل URL را کدگذاری کنم یا فقط پارامترها را؟
نام و مقدار هر پارامتر را جداگانه با کدگذاری مؤلفه کدگذاری کنید، سپس آن‌ها را با = و & به هم وصل کنید. کدگذاری یک URL کامل در حالت مؤلفه، :// را هم escape می‌کند و URL را خراب می‌کند.
آیا کدگذاری دوباره مشکل‌ساز است؟
بله. کدگذاری یک رشتهٔ از پیش کدگذاری‌شده %20 را به %2520 تبدیل می‌کند. اگر %25 و پس از آن ارقام هگز می‌بینید، احتمالاً مقدار دو بار کدگذاری شده است. برای بازیابی اصل آن، دو بار رمزگشایی کنید.

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