קידוד כתובת URL

תווים מסוימים לא יכולים להיות חלק מכתובת URL (למשל, הרווח) ולתווים מסוימים יש משמעות מיוחדת בכתובת ה-URL. בטפסים של HTML, התו = משמש להפרדת שם מערך. כדי להתמודד עם הבעיה הזו, התחביר הגנרי של URI משתמש בקידוד של כתובות URL, אבל טופסי HTML משמשים חלופות נוספות במקום להשתמש בקידוד באחוזים לכל התווים האלו.

לדוגמה, רווחים במחרוזת מקודדים באמצעות %20 או מוחלפים בסימן הפלוס (+). אם משתמשים בתו קו אנכי (|) כמפריד, חשוב לוודא שהקווים מקודדים כ-%7C. פסיק במחרוזת צריך להיות מקודד כ-%2C.

מומלץ להשתמש בספריות הרגילות של בניית כתובות URL בפלטפורמה כדי לקודד באופן אוטומטי את כתובות ה-URL, כדי לוודא שכתובות ה-URL מסומנות כמו שצריך בתו בריחה (escape) בפלטפורמה.

יצירת כתובת URL חוקית

יכול להיות שתחשבו שכתובת URL 'תקפה' מובנת מאליה, אבל זה לא המצב. לדוגמה, כתובת URL שהוזנה בסרגל הכתובות בדפדפן עשויה להכיל תווים מיוחדים (למשל, "上海+中國"). לפני ההעברה, הדפדפן צריך לתרגם את התווים האלה לקידוד שונה. באותו אסימון, כל קוד שיוצר או מקבל קלט UTF-8 עלול להתייחס לכתובות URL עם תווי UTF-8 כ'תקינים', אבל הוא יצטרך לתרגם את התווים האלה לפני שהם שולחים אותם לשרת אינטרנט. התהליך הזה נקרא קידוד כתובות URL או קידוד באחוזים.

תווים מיוחדים

אנחנו צריכים לתרגם תווים מיוחדים כי כל כתובות ה-URL צריכות להתאים לתחביר שצוין במפרט Uniform Resource Identifier (URI). למעשה, כתובות URL חייבות להכיל רק קבוצת משנה מיוחדת של תווי ASCII: הסמלים האלפאנומריים המוכרים, וחלק מהתווים השמורים לשימוש כתווי בקרה בכתובות URL. הטבלה הזו מסכמת את התווים הבאים:

סיכום תווים חוקיים של כתובת URL
סיוםתוויםשימוש בכתובת URL
אלפאנומרי 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 X Y Z 0 1 2 3 מחרוזות טקסט, שימוש בסכמה (http), יציאה (8080) וכו'.
לא שמור - _ . ~ מחרוזות טקסט
בוצעה הזמנה ! * ' ( ) ; : @ & = + $ , / ? % # [ ] תווי בקרה ו/או מחרוזות טקסט

כשיוצרים כתובת URL תקינה, צריך לוודא שהיא מכילה רק את התווים שמופיעים בטבלה 'סיכום תווים של כתובות URL חוקיות'. שינוי של כתובת URL לשימוש בקבוצת התווים הזו מוביל בדרך כלל לשתי בעיות, אחת להשמטת נתונים והחלפה:

  • התווים שבהם ברצונך לטפל קיימים מחוץ לקבוצה שלמעלה. לדוגמה, תווים בשפות זרות כמו 上海+中國 צריכים להיות מקודדים באמצעות התווים שלמעלה. לפי המוסכמה הפופולרית, רווחים (שלא מותרים בכתובות URL) מיוצגים לעיתים קרובות גם באמצעות תו '+'.
  • התווים קיימים במסגרת הקבוצה כתווים שמורים, אבל צריך להשתמש בהם באופן מילולי. לדוגמה, הפונקציה ? משמשת בכתובות URL כדי לציין את ההתחלה של מחרוזת השאילתה. אם רוצים להשתמש במחרוזת '?' וב-Mysterions', צריך לקודד את התו '?'.

כל התווים לקידודי התווים שמתאימים לכתובות URL מקודדים באמצעות תו '%' וערך הקסדצימלי בן שני תווים שתואם לתו UTF-8. לדוגמה, 上海+中國 בקידוד UTF-8 יותאם לקידודי התווים שמתאימים לכתובות URL באופן הבא: %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 מוגבלות ל-16,384 תווים לכל שירותי האינטרנט וממשקי ה-API הסטטיים באינטרנט של הפלטפורמה של מפות Google. ברוב השירותים שלרוב תתקרבו למגבלת התווים הזו. עם זאת, חשוב לשים לב שלשירותים מסוימים יש מספר פרמטרים שעשויים להוביל לכתובות URL ארוכות.