קידוד כתובות URL

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

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

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

יצירת כתובת URL תקינה

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

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

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

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

  • התווים שאתם רוצים לטפל בהם לא נמצאים בקבוצה שלמעלה. לדוגמה, תווים בשפות זרות, כמו 上海+中國, צריך לקודד באמצעות התווים שלמעלה. לפי הסכמה מקובלת, לעתים קרובות רווחים (שאסור להשתמש בהם בכתובות URL) מיוצגים גם באמצעות התו '+'.
  • התווים נמצאים בקבוצה שלמעלה בתור תווים שמורים, אבל צריך להשתמש בהם באופן מילולי. לדוגמה, התו ? משמש בכתובות URL כדי לציין את תחילת מחרוזת השאילתה. אם רוצים להשתמש במחרוזת '? and the 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 שמקבלים מהקלדה של משתמש. לדוגמה, משתמש יכול להזין כתובת כ"רחוב 5 ו-Main St.‎" באופן כללי, צריך ליצור את כתובת ה-URL מהחלקים שלה, ולתייחס לכל קלט של משתמש כאל תווים רגילים.

בנוסף, כתובות URL מוגבלות ל-16,384 תווים בכל שירותי האינטרנט וממשקי ה-API הסטטיים של הפלטפורמה של מפות Google. ברוב השירותים, מגבלת התווים הזו לא תהיה רלוונטית. עם זאת, חשוב לזכור שלשירותים מסוימים יש כמה פרמטרים שעשויים לגרום לכתובות URL ארוכות.