ساخت مقادیر کوئریاسترینگ
هر ورودی کاربر که در ?q=... قرار میدهید باید با حالت Component رمزگذاری شود. حالت URI کاراکترهای = و & را خام رها میکند و در صورتی که مقدار شامل آنها باشد، URL شما را خراب میکند.
هر متنی را به یک رشتهی percent-encoding شده و امن برای URL تبدیل کنید، یا یک URL کدشده را به متن ساده برگردانید. پیشنمایش زنده، سازگار با UTF-8 و کاملاً درون مرورگر شما.
Component (encodeURIComponent) هر چیزی را که کاراکتر unreserved نباشد escape میکند — امنترین گزینه برای مقادیر کوئریاسترینگ، بخشهای مسیر یا هر فیلد منفرد. URI (encodeURI) کاراکترهای ساختاری URL را حفظ میکند (:/?#=&) — برای یک URL کامل از آن استفاده کنید. Form (application/x-www-form-urlencoded) همان Component است با این تفاوت که فاصلهها به '+' تبدیل میشوند — همان چیزی که فرمهای HTML استفاده میکنند.
RFC 3986 مجموعهای از کاراکترهای «unreserved» را تعریف میکند که نیازی به رمزگذاری ندارند: A-Z a-z 0-9 - _. ~. هر چیز دیگری percent-encoding میشود. encodeURIComponent علاوه بر این، :/?#&= را نیز رمزگذاری میکند، در حالی که encodeURI آنها را دستنخورده میگذارد. این تفاوت زمانی مهم است که در حال رمزگذاری یک مقدار کوئری در برابر یک URL کامل هستید.
یک فایل متنی را اینجا رها کنید، یا برای انتخاب کلیک کنید
هر فایل متنی UTF-8: .txt،.csv،.json،.url،.log
سریع، دقیق و فقط در مرورگر — برای توسعهدهندگان، نویسندگان محتوا و هر کسی که در حال اشکالزدایی URL است.
بسته به آنچه رمزگذاری میکنید — مقدار کوئریاسترینگ، یک URL کامل، یا دادهی فرم HTML — حالت Component، URI کامل یا Form را انتخاب کنید.
هر رمزگذاری و رمزگشایی با JavaScript بومی در مرورگر شما انجام میشود. متن و URLهای شما هرگز از دستگاه شما خارج نمیشوند.
خروجی با هر فشردن کلید بهروزرسانی میشود — نه دکمهی «Encode»ی برای زدن، نه رفتوبرگشتی به سرور.
ایموجی، کاراکترهای CJK، لاتین با علامت و سیریلیک بهدرستی از طریق encodeURIComponent رفتوبرگشت میکنند.
هنگام رمزگشایی، میتوانید '+' را بهعنوان فاصله در نظر بگیرید — قراردادی که فرمهای HTML تحت application/x-www-form-urlencoded استفاده میکنند.
یک فایل.txt،.csv یا.json را رها کنید تا در یک مرحله رمزگذاری یا رمزگشایی شود. خروجی بهصورت یک فایل.txt تمیز دانلود میشود.
سه API بومی مرورگر، سه حالت، همگی در همان صفحهای که میخوانید اجرا میشوند.
با هر فشردن کلید، رشتهی ورودی به یک تابع کوچک JavaScript ارسال میشود. هیچ debounce، هیچ فراخوانی API و هیچ fetchی در کار نیست — این تابع بهصورت همگام در تب مرورگر شما اجرا میشود.
Component تابع encodeURIComponent را فراخوانی میکند — هر چیزی که A-Z a-z 0-9 - _. ~ نباشد را escape میکند. URI تابع encodeURI را فراخوانی میکند — :/?#=& را حفظ میکند تا یک URL کامل معتبر بماند. Form از encodeURIComponent استفاده میکند و فاصله را با + جایگزین میکند طبق application/x-www-form-urlencoded.
هر دو تابع encodeURIComponent و encodeURI بهصورت داخلی رشته را پیش از percent-encoding هر بایت غیرامن، به بایتهای UTF-8 تبدیل میکنند. این یعنی %E4%B8%AD برای حرف چینی 中 — دقیقاً همان چیزی که RFC 3986 میخواهد.
نتیجه بهعنوان مقدار خروجی فقطخواندنی تنظیم میشود. روی Copy کلیک کنید تا با navigator.clipboard.writeText در کلیپبورد قرار گیرد، یا Download را بزنید تا از طریق یک Blob URL بهصورت .txt ذخیره شود — هر دو در مرورگر شما باقی میمانند.
موقعیتهای واقعی که در آن انتخاب حالت رمزگذاری درست از باگ جلوگیری میکند.
هر ورودی کاربر که در ?q=... قرار میدهید باید با حالت Component رمزگذاری شود. حالت URI کاراکترهای = و & را خام رها میکند و در صورتی که مقدار شامل آنها باشد، URL شما را خراب میکند.
برخی برنامههای چت و فایلهای PDF در صورت وجود فاصلههای خام یا کاراکترهای غیر ASCII، لینکها را خراب میکنند. URL را با حالت URI پردازش کنید تا در همهجا برای کپی-پیست امن باشد.
وقتی API شما یک درخواست را رد میکند، URL را در حالت Decode بچسبانید تا ببینید سرور واقعاً چه چیزی دیده است. مقادیر دو بار کدشده (که خود % بهصورت %25 رمزگذاری شده) فوراً نمایان میشوند.
هنگام اشکالزدایی بدنههای POST در application/x-www-form-urlencoded، با گزینهی «+ بهعنوان فاصله» فعال رمزگشایی کنید. این قراردادی است که مرورگرها استفاده میکنند، و فراموش کردن آن دلیل شماره یک باگ «چرا نام کاربری من با علامت + نمایش داده میشود» است.
URLهایی که رمزگذاری میکنید اغلب شامل ایمیل واقعی مشتریان، شناسهها یا توکنهای نشست هستند — دقیقاً همان نوع دادههایی که نمیخواهید در ابزار سرور یک غریبه بچسبانید. iKit URL Encoder بهصورت JavaScript که از قبل در مرورگر شما بارگذاری شده اجرا میشود، بنابراین ورودی هرگز از تب شما خارج نمیشود.
fetch، XHR یا beacon در حین رمزگذاری یا رمزگشایی.
آموزشهای تخصصی و مقایسه ابزارها از وبلاگ iKit.
The 30-year-old form-encoding quirk explained — when + means space, when it means literal +, and how to fix the email-with-plus bug.
When to reach for Base64 versus URL percent-encoding, and what each encoding actually solves.
Pretty-print, validate, and structurally diff messy JSON in any browser.
Component (encodeURIComponent) هر چیزی را که کاراکتر unreserved نباشد escape میکند — امنترین گزینه برای مقادیر کوئریاسترینگ، بخشهای مسیر یا هر فیلد منفرد. URI (encodeURI) کاراکترهای ساختاری URL را حفظ میکند (:/?#=&) — برای یک URL کامل از آن استفاده کنید. Form (application/x-www-form-urlencoded) همان Component است با این تفاوت که فاصلهها به '+' تبدیل میشوند — همان چیزی که فرمهای HTML استفاده میکنند.
RFC 3986 مجموعهای از کاراکترهای «unreserved» را تعریف میکند که نیازی به رمزگذاری ندارند: A-Z a-z 0-9 - _. ~. هر چیز دیگری percent-encoding میشود. encodeURIComponent علاوه بر این، :/?#&= را نیز رمزگذاری میکند، در حالی که encodeURI آنها را دستنخورده میگذارد. این تفاوت زمانی مهم است که در حال رمزگذاری یک مقدار کوئری در برابر یک URL کامل هستید.
سه دلیل رایج: (۱) ورودی اصلی بهصورت Form کدشده بوده و باید '+' بهعنوان فاصله در نظر گرفته شود — این گزینه را فعال کنید. (۲) دو بار کدشده — ورودی دو بار رمزگذاری شده؛ یک بار دیگر رمزگشایی کنید. (۳) دنبالهی percent-encoding نامعتبر — یک % بدون دو رقم هگز در پی آن. برای موقعیت دقیق بایت، پیام خطا را ببینید.
بله برای حالت Component — ما مستقیماً encodeURIComponent را فراخوانی میکنیم. حالت Form تنظیمات استاندارد form-encoding را اضافه میکند (! ' * به %21 %27 %28 %29 %2A تبدیل میشوند) طبق RFC 3986 و WHATWG. حالت URI، encodeURI را فراخوانی میکند، که همان چیزی است که اکثر زبانها از «percent-encode یک URL» منظورشان است.
خیر. کل ابزار JavaScript درون همین صفحه است — رمزگذاری و رمزگشایی در مرورگر شما رخ میدهد. میتوانید با باز کردن DevTools → Network آن را تأیید کنید: در حین عملیات رمزگذاری یا رمزگشایی هیچ درخواستی ارسال نمیشود.