کدبندی نشانی وب

برخی‌از نویسه‌ها نمی‌توانند بخشی از نشانی وب باشند (برای مثال، فاصله) و برخی‌از نویسه‌های دیگر معنی خاصی در نشانی وب دارند. در فرم‌های HTML، از نویسه = برای جدا کردن نام از مقدار استفاده می‌شود. نحو عمومی URI از کدبندی URL برای حل این مشکل استفاده می‌کند، درحالی‌که فرم‌های HTML به‌جای اعمال کدبندی درصدی برای همه این نویسه‌ها، برخی جایگزینی‌های اضافی را انجام می‌دهند.

برای مثال، فاصله‌ها در رشته یا با %20 کدبندی می‌شوند یا با علامت جمع (+) جایگزین می‌شوند. اگر از نویسه خط عمودی (|) به‌عنوان جداکننده استفاده می‌کنید، حتماً خط عمودی را به‌صورت %7C کدبندی کنید. ویرگول در رشته باید به‌صورت %2C کدگذاری شود.

توصیه می‌شود از کتابخانه‌های ساخت نشانی وب معمولی پلاتفرم خود استفاده کنید تا نشانی‌های وب شما به‌طور خودکار کدبندی شوند و مطمئن شوید که نشانی‌های وب به‌درستی برای پلاتفرم شما گریز داده شده‌اند.

درحال ساختن نشانی وب معتبر

ممکن است فکر کنید که نشانی وب «معتبر» بدیهی است، اما کاملاً این‌طور نیست. برای مثال، نشانی وبی که در نوار نشانی مرورگر وارد می‌شود ممکن است حاوی نویسه‌های خاص (مثل "上海+中國") باشد؛ مرورگر باید قبل‌از انتقال، این نویسه‌ها را به‌طور داخلی به کدبندی دیگری ترجمه کند. به همین ترتیب، هر کدی که ورودی UTF-8 را تولید یا قبول می‌کند ممکن است نشانی‌های وب با نویسه‌های UTF-8 را به‌عنوان «معتبر» درنظر بگیرد، اما همچنین باید آن نویسه‌ها را قبل‌از ارسال به سرور وب ترجمه کند. به این فرایند کدبندی نشانی وب یا کدبندی درصدی می‌گویند.

نویسه‌های خاص

باید نویسه‌های خاص را ترجمه کنیم زیرا همه نشانی‌های وب باید با نحو مشخص‌شده در مشخصات شناسه منبع یکسان (URI) مطابقت داشته باشند. درواقع، این یعنی نشانی‌های وب باید فقط شامل زیرمجموعه خاصی از نویسه‌های ASCII باشند: نمادهای آلفانومریک آشنا، و برخی نویسه‌های رزروشده برای استفاده به‌عنوان نویسه‌های کنترل در نشانی‌های وب. این جدول این نویسه‌ها را خلاصه می‌کند:

خلاصه نویسه‌های معتبر نشانی وب
به‌صفنویسه‌هااستفاده از نشانی وب
الفباعددی a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 رشته‌های نوشتاری، استفاده از طرح (http)، درگاه (8080)، و غیره.
رزرو نشده است - _ . ~ رشته‌های نوشتاری
رزروشده ! * ' ( ) ; : @ & = + $ , / ? % # [ ] نویسه‌های کنترلی و/یا رشته‌های نوشتاری

هنگام ساختن نشانی وب معتبر، باید مطمئن شوید که فقط حاوی نویسه‌های نشان‌داده‌شده در جدول باشد. منطبق کردن نشانی وب برای استفاده از این مجموعه نویسه‌ها معمولاً به دو مشکل منجر می‌شود، یکی حذف و دیگری جایگزینی:

  • نویسه‌هایی که می‌خواهید مدیریت کنید خارج از مجموعه بالا قرار دارند. برای مثال، نویسه‌های زبان‌های خارجی مانند 上海+中國 باید بااستفاده از نویسه‌های بالا کدگذاری شوند. طبق قراردادهای رایج، فاصله‌ها (که در نشانی‌های وب مجاز نیستند) اغلب بااستفاده از نویسه به‌علاوه '+' نیز نشان داده می‌شوند.
  • نویسه‌هایی در مجموعه بالا به‌عنوان نویسه‌های رزروشده وجود دارند، اما باید به‌صورت تحت‌اللفظی استفاده شوند. برای مثال، ? در نشانی‌های وب برای نشان دادن شروع رشته پُرسمان استفاده می‌شود؛ اگر بخواهید از رشته «? and the Mysterions» استفاده کنید، باید نویسه '?' را کدبندی کنید.

همه نویسه‌هایی که باید کدبندی URL شوند، بااستفاده از نویسه '%' و مقدار هگز دو نویسه‌ای مربوط به نویسه UTF-8 آن‌ها کدبندی می‌شوند. برای مثال، 上海+中國 در UTF-8 به‌صورت %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B کدبندی نشانی وب می‌شود. رشته ? and the Mysterians به‌صورت %3F+and+the+Mysterians یا %3F%20and%20the%20Mysterians کدبندی نشانی وب می‌شود.

نویسه‌های رایجی که نیاز به کدبندی دارند

برخی‌از نویسه‌های رایجی که باید کدگذاری شوند عبارت‌اند از:

شخصیت ناامن مقدار کدبندی‌شده
فاصله %20
» %22
< %3C
> %3E
# %23
٪ %25
| %7C

تبدیل نشانی وبی که از ورودی کاربر دریافت می‌کنید گاهی اوقات دشوار است. برای مثال، ممکن است کاربر نشانی را به‌صورت «خیابان پنجم و اصلی» وارد کند. به‌طور کلی، باید نشانی وب را از بخش‌های آن بسازید و هر ورودی کاربر را به‌عنوان نویسه‌های تحت‌اللفظی درنظر بگیرید.

علاوه‌براین، نشانی‌های وب برای همه سرویس‌های وب Google Maps Platform و میاناهای برنامه‌سازی کاربردی وب ایستا به ۱۶۳۸۴ نویسه محدود است. برای اکثر سرویس‌ها، این حد نویسه به‌ندرت نزدیک می‌شود. بااین‌حال، توجه داشته باشید که برخی‌از سرویس‌ها چندین پارامتر دارند که ممکن است منجر به نشانی‌های وب طولانی شود.