برخی از کاراکترها نمی توانند بخشی از یک URL باشند (مثلاً فاصله) و برخی دیگر از کاراکترها معنای خاصی در URL دارند. در فرم های HTML از کاراکتر =
برای جدا کردن یک نام از یک مقدار استفاده می شود. نحو عمومی URI از رمزگذاری URL برای مقابله با این مشکل استفاده می کند، در حالی که فرم های HTML به جای اعمال رمزگذاری درصدی برای همه این کاراکترها، برخی جایگزین های اضافی را انجام می دهند.
برای مثال، فضاهای یک رشته یا با %20
کدگذاری می شوند یا با علامت مثبت ( +
) جایگزین می شوند. اگر از یک کاراکتر لوله ( |
) به عنوان جداکننده استفاده می کنید، حتماً لوله را به صورت %7C
رمزگذاری کنید. یک کاما در یک رشته باید به صورت %2C
کدگذاری شود.
توصیه می شود از کتابخانه های ساخت URL معمولی پلتفرم خود برای رمزگذاری خودکار URL های خود استفاده کنید تا اطمینان حاصل کنید که URL ها به درستی برای پلت فرم شما فرار می کنند.
ساخت یک URL معتبر
ممکن است فکر کنید که URL "معتبر" بدیهی است، اما کاملاً اینطور نیست. برای مثال، URL وارد شده در یک نوار آدرس در مرورگر، ممکن است حاوی کاراکترهای خاصی باشد (به عنوان مثال "上海+中國"
). مرورگر باید آن کاراکترها را به صورت داخلی قبل از انتقال به رمزگذاری دیگری ترجمه کند. به همین ترتیب، هر کدی که ورودی UTF-8 را تولید یا قبول می کند، ممکن است URL های دارای کاراکترهای UTF-8 را به عنوان "معتبر" تلقی کند، اما همچنین باید آن کاراکترها را قبل از ارسال به سرور وب ترجمه کند. این فرآیند کدگذاری URL یا رمزگذاری درصد نامیده می شود.
شخصیت های خاص
ما باید کاراکترهای ویژه را ترجمه کنیم زیرا همه URL ها باید با نحو مشخص شده توسط مشخصات Uniform Resource Identifier (URI) مطابقت داشته باشند. در واقع، این بدان معنی است که URL ها باید فقط شامل یک زیرمجموعه خاص از کاراکترهای ASCII باشند: نمادهای الفبایی عددی آشنا، و برخی از کاراکترهای رزرو شده برای استفاده به عنوان کاراکترهای کنترل در URL. این جدول به طور خلاصه این شخصیت ها را نشان می دهد:
تنظیم کنید | شخصیت ها | استفاده از URL |
---|---|---|
الفبایی | abcdefghijklm nopqrstuvwxyz ABCDEFGHIJKLM NOPQRSTUVWXYZ 0 1 2 3 4 5 6 7 8 9 | رشته های متنی، استفاده از طرح ( http )، پورت ( 8080 )، و غیره. |
بدون رزرو | - _ . ~ | رشته های متنی |
رزرو شده است | ! * ' ( ) ; : @ & = + $ , / ? % # [ ] | کاراکترها و/یا رشته های متنی را کنترل کنید |
هنگام ساختن یک URL معتبر، باید مطمئن شوید که فقط شامل کاراکترهای نشان داده شده در جدول باشد. تطبیق یک URL برای استفاده از این مجموعه از کاراکترها به طور کلی منجر به دو مشکل می شود، یکی حذف و دیگری جایگزینی:
- کاراکترهایی که می خواهید آنها را مدیریت کنید خارج از مجموعه فوق وجود دارند. برای مثال، کاراکترهای زبانهای خارجی مانند
上海+中國
باید با استفاده از کاراکترهای بالا کدگذاری شوند. طبق قرارداد رایج، فضاها (که در URL ها مجاز نیستند) اغلب با استفاده از کاراکتر'+'
نیز نمایش داده می شوند. - کاراکترها در مجموعه فوق به عنوان کاراکترهای رزرو شده وجود دارند، اما باید به معنای واقعی کلمه استفاده شوند. به عنوان مثال
?
در URL ها برای نشان دادن ابتدای رشته پرس و جو استفاده می شود. اگر می خواهید از رشته "? and the Mysterions" استفاده کنید، باید'?'
را رمزگذاری کنید. شخصیت
همه کاراکترهایی که باید با URL رمزگذاری شوند با استفاده از یک کاراکتر '%'
و یک مقدار هگز دو نویسه مطابق با نویسه UTF-8 کدگذاری می شوند. به عنوان مثال،上海+中國
در UTF-8 به صورت %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B
کدگذاری میشود. رشته ? and the Mysterians
با URL به صورت %3F+and+the+Mysterians
یا %3F%20and%20the%20Mysterians
کدگذاری می شوند.
کاراکترهای رایج که نیاز به رمزگذاری دارند
برخی از کاراکترهای رایجی که باید کدگذاری شوند عبارتند از:
شخصیت ناامن | مقدار رمزگذاری شده |
---|---|
فضا | %20 |
" | %22 |
< | %3C |
> | %3E |
# | %23 |
% | %25 |
| | %7C |
تبدیل URL که از ورودی کاربر دریافت می کنید گاهی اوقات مشکل است. به عنوان مثال، کاربر ممکن است آدرسی را به عنوان "خیابان پنجم و اصلی" وارد کند. به طور کلی، شما باید URL خود را از قسمت های آن بسازید و هر ورودی کاربر را به عنوان کاراکتر تحت اللفظی در نظر بگیرید.
علاوه بر این، URLها برای همه سرویسهای وب پلتفرم Google Maps و APIهای وب استاتیک به ۱۶۳۸۴ کاراکتر محدود میشوند. برای اکثر سرویس ها، به ندرت به این محدودیت شخصیت نزدیک می شود. با این حال، توجه داشته باشید که برخی از سرویس ها دارای چندین پارامتر هستند که ممکن است منجر به URL های طولانی شود.