پرش به محتوا

کدگذار URL: فرار از نویسه‌های خاص در URL به صورت آنلاین و رایگان

ابزار رایگان فرار از رشته URL برای کدگذاری فوری نویسه‌های خاص. تبدیل فاصله‌ها، یونیکد و نمادها به فرمت درصدی. مناسب برای API‌ها، فرم‌های وب و URL‌های بین‌المللی. همین الان امتحان کنید!

اسکیپر رشته URL

ماشین حساب بارگذاری...
📚

مستندات

کدگذاری URL: چیست و چگونه کار می‌کند

کدگذاری URL که با نام کدگذاری درصدی نیز شناخته می‌شود، روشی برای نمایش نویسه‌ها در نشانی وب با استفاده از تنها مجموعه‌ای کوچک از نویسه‌های امن ASCII است. این روش با جایگزین کردن نویسهٔ ناامن با علامت % و سپس دو رقم شانزده‌پایه کار می‌کند. این ابزار گریزدهندهٔ رشتهٔ URL، متن را دقیقاً به همان روشی کدگذاری می‌کند که تابع داخلی جاوااسکریپت encodeURIComponent انجام می‌دهد.

چرا URLها به کدگذاری نیاز دارند

یک URL فقط می‌تواند شامل مجموعه‌ای محدود از نویسه‌ها باشد: حروف، ارقام و تعداد معدودی علامت نگارشی. فاصله‌ها، حروف دارای اعراب، نویسه‌های الفباهای غیرلاتین و نمادهایی مانند & یا =، اگر بدون کدگذاری در URL ظاهر شوند، می‌توانند آن را خراب کنند یا معنایش را تغییر دهند. برای نمونه، وجود فاصله در یک پیوند ممکن است باعث شود مرورگر یا سرور URL را دو بخش جداگانه بخواند. کدگذاری درصدی این نویسه‌ها را با کدی جایگزین می‌کند که همهٔ مرورگرها و سرورها آن را به یک شکل می‌خوانند.

نویسه‌هایی که این ابزار بدون تغییر باقی می‌گذارد

این ابزار هرگز نویسه‌های زیر را تغییر نمی‌دهد. آن‌ها بدون تغییر عبور می‌کنند:

  • حروف بزرگ و کوچک: A تا Z، a تا z
  • ارقام: 0 تا 9
  • علامت‌های نگارشی - . _ ~ ! * ' ( )

هر نویسهٔ دیگری به‌صورت درصدی کدگذاری می‌شود، از جمله:

  • نویسهٔ فاصله و علامت‌های نگارشی مانند : / ? # [ ] @ $ & + , ; =
  • حروف دارای اعراب و هر نویسهٔ غیر ASCII یا یونیکد دیگر
  • خودِ نویسهٔ لفظی % که همیشه به %25 تبدیل می‌شود، حتی اگر از قبل بخشی از یک دنبالهٔ کدگذاری‌شدهٔ درصدی باشد

برخی راهنماهای عمومی نحو URL، نویسه‌های ! * ' ( و ) را همراه با سایر علائم نگارشی، نویسه‌هایی می‌دانند که در برخی زمینه‌ها «ممکن است به کدگذاری نیاز داشته باشند». این ابزار مشخص آن‌ها را کدگذاری نمی‌کند، زیرا از مجموعه‌قواعد encodeURIComponent پیروی می‌کند که این نویسه‌ها را امن تلقی می‌کند.

چگونه یک رشتهٔ کدگذاری‌شدهٔ درصدی را محاسبه کنیم (فرمول)

این ابزار هر نویسهٔ ورودی را یک‌به‌یک بررسی می‌کند و قاعدهٔ زیر را به کار می‌برد:

  1. اگر نویسه یکی از نویسه‌های بدون تغییرِ فهرست‌شده در بالا باشد، آن را همان‌طور نگه می‌دارد.
  2. در غیر این صورت، نویسه را به دنبالهٔ بایتی UTF-8 تبدیل می‌کند. حروف لاتین دارای اعراب، حروف یونانی، سیریلیک و عربی از دو بایت استفاده می‌کنند. نویسه‌های چینی، ژاپنی و کره‌ای از سه بایت استفاده می‌کنند. ایموجی‌ها چهار بایت دارند.
  3. هر بایت را به‌صورت یک عدد شانزده‌پایهٔ دورقمی می‌نویسد.
  4. پیش از هر جفت شانزده‌پایه یک % می‌گذارد.
  5. نتایج را به‌ترتیب به هم می‌پیوندد تا رشتهٔ کدگذاری‌شده شکل بگیرد.

مثال حل‌شده

ورودی: Jürgen & Björk

بررسی آن به‌صورت نویسه‌به‌نویسه:

نویسهنتیجه
JJ (بدون تغییر)
ü%C3%BC (بایت‌های UTF-8: ۰xC3، ۰xBC)
rgenrgen (بدون تغییر)
(فاصله)%20
&%26
(فاصله)%20
BjBj (بدون تغییر)
ö%C3%B6 (بایت‌های UTF-8: ۰xC3، ۰xB6)
rkrk (بدون تغییر)

خروجی: J%C3%BCrgen%20%26%20Bj%C3%B6rk

نمونهٔ دوم، مجموعهٔ نویسه‌های بدون تغییر را در عمل نشان می‌دهد. کدگذاری رشتهٔ -_.!~*'() نتیجهٔ -_.!~*'() را تولید می‌کند؛ دقیقاً همان متن، زیرا همهٔ نویسه‌های آن در مجموعهٔ نویسه‌های مجاز قرار دارند. کدگذاری رشتهٔ 100% نتیجهٔ 100%25 را می‌دهد، زیرا خودِ علامت % نویسه‌ای امن نیست.

رمزگشایی یک رشتهٔ کدگذاری‌شدهٔ درصدی

رمزگشایی این فرایند را معکوس می‌کند: هر دنبالهٔ %XX به‌عنوان یک بایت شانزده‌پایه خوانده می‌شود، بایت‌ها دوباره در قالب نویسهٔ اصلی UTF-8 گروه‌بندی می‌شوند و نویسه جایگزین دنباله می‌شود. برای مثال، %C3%BC دوباره به ü و %20 به فاصله رمزگشایی می‌شود. این ابزار فقط کدگذاری می‌کند؛ برای معکوس کردن فرایند به رمزگشای جداگانه نیاز است.

کاربردهای رایج

کدگذاری درصدی هر زمان استفاده می‌شود که متنی که شخص وارد کرده است، نه متنی که برنامه‌نویس نوشته، باید بخشی از یک URL شود:

  • جعبه‌های جست‌وجویی که عبارت جست‌وجو را در نوار نشانی قرار می‌دهند، مانند ?q=shoes%20%26%20bags
  • پارامترهای پرس‌وجویی که نام‌ها، نشانی‌ها یا سایر داده‌های کاربر را حمل می‌کنند
  • پیوند به صفحه‌هایی با عنوان‌هایی به زبان‌هایی که از حروف دارای اعراب یا خط‌های غیرلاتین استفاده می‌کنند
  • درخواست‌های API که توکن‌ها یا شناسه‌ها را به‌عنوان بخشی از URL ارسال می‌کنند

نمونه‌های کد

1// JavaScript
2encodeURIComponent("Jürgen & Björk");
3// "J%C3%BCrgen%20%26%20Bj%C3%B6rk"
4

تابع quote پایتون همیشه حروف، ارقام و - . _ ~ را بدون تغییر باقی می‌گذارد. پنج نویسهٔ اضافی یعنی ! * ' ( ) باید در safe فهرست شوند تا با این ابزار مطابقت داشته باشند. بدون آن‌ها، quote در عوض %21 %2A %27 %28 %29 را برمی‌گرداند.

تاریخچه

ایدهٔ کدگذاری نویسه‌های ناامن در URL به RFC ۱۷۳۸ در (۴٬۴۱۰ cm) ۱۹۹۴ بازمی‌گردد؛ این سند یکی از نخستین اسنادی بود که قالب URL را تعریف کرد. RFC ۳۹۸۶ که در ۲۰۰۵ منتشر شد، قواعد را به‌روزرسانی کرد و مجموعهٔ نویسه‌های «مجاز» را که هرگز به کدگذاری نیاز ندارند، به‌طور رسمی تعریف کرد. encodeURIComponent، تابع جاوااسکریپتی که این ابزار بر پایهٔ آن ساخته شده است، از مجموعهٔ نویسه‌های مجاز کمی گسترده‌تری نسبت به RFC ۳۹۸۶ پیروی می‌کند: این تابع همچنین ! * ' ( و ) را بدون کدگذاری باقی می‌گذارد که با نسخه‌ای قدیمی‌تر از مشخصات URI مطابقت دارد.

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

تفاوت کدگذاری URL و گریز URL چیست؟ این دو یکسان‌اند. هر دو اصطلاح به کدگذاری درصدی اشاره دارند که در آن یک نویسه با % و پس از آن دو رقم شانزده‌پایه جایگزین می‌شود.

چرا !، *، '، ( و ) در این ابزار بدون تغییر می‌مانند؟ این ابزار از encodeURIComponent استفاده می‌کند که این پنج نویسه را امن تلقی کرده و دقیقاً همان‌طور که وارد شده‌اند باقی می‌گذارد. سایر توابع کدگذاری و برخی سرورها ممکن است همچنان انتظار داشته باشند این نویسه‌ها کدگذاری شوند؛ بنابراین اگر مشکلی پیش آمد، سامانهٔ مقصد را بررسی کنید.

تفاوت %20 و + برای نمایش فاصله چیست؟ هر دو نشان‌دهندهٔ فاصله‌اند. %20 کدگذاری درصدی عمومی برای فاصله است. علامت + فقط در داده‌های application/x-www-form-urlencoded، یعنی قالب مورد استفاده در ارسال فرم‌های HTML، کاربردی ویژه دارد و این ابزار از آن استفاده نمی‌کند.

آیا این ابزار متن از قبل کدگذاری‌شده را رمزگشایی می‌کند؟ خیر. این ابزار فقط کدگذاری می‌کند. اگر ورودی از قبل شامل علامت % باشد، آن % به‌عنوان یک نویسهٔ لفظی در نظر گرفته شده و در خروجی به %25 تبدیل می‌شود، نه اینکه بدون تغییر باقی بماند.

نویسه‌های غیرلاتین، مانند متن چینی یا عربی، چگونه پردازش می‌شوند؟ هر نویسه ابتدا به دنبالهٔ بایتی UTF-8 تبدیل می‌شود و سپس هر بایت به‌صورت درصدی کدگذاری می‌شود. یک نویسهٔ چینی از سه بایت استفاده می‌کند، بنابراین سه گروه %XX تولید می‌کند. یک حرف عربی از دو بایت استفاده می‌کند، بنابراین دو گروه تولید می‌کند.

این ابزار چه زمانی از کدگذاری متن خودداری می‌کند؟ فقط زمانی که متن شامل نیمی از یک جفت جانشین باشد. جفت جانشین کد دوم‌قسمتی‌ای است که نویسه‌ای بالاتر از U+FFFF، مانند ایموجی، را ذخیره می‌کند. یک نیمهٔ تنها شکل معتبر UTF-8 ندارد؛ بنابراین ابزار به‌جای نتیجه، خطا نشان می‌دهد. ورود عادی متن نمی‌تواند چنین وضعیتی ایجاد کند؛ این حالت معمولاً از یک رونوشت ناقص یا پیوند خراب ناشی می‌شود.

آیا باید کل URL را کدگذاری کنم یا فقط بخشی از آن را؟ فقط بخش‌هایی را کدگذاری کنید که دادهٔ کاربر را در خود دارند، مانند مقادیر پرس‌وجو یا بخش‌های مسیر؛ نه بخش‌هایی را که ساختار URL را تشکیل می‌دهند، مانند https:// و نام دامنه. کدگذاری یک URL کامل با کدگذار مؤلفه، نویسه‌های :، / و ? آن را نیز به کدهای درصدی تبدیل می‌کند و نشانی را خراب خواهد کرد.

منابع

  1. RFC 3986 — شناسهٔ منبع یکنواخت (URI): نحو عمومی
  2. کدگذاری درصدی — ویکی‌پدیا
  3. MDN — encodeURIComponent()
  4. استاندارد URL — WHATWG