Menu

קידוד ופענוח URL

לקודד ולפענח רכיבי URL בבטחה.

מאת Nethanel Bar, Co-founder & CEO

עודכן לאחרונה

מוכנים ללמוד תכנות באמת?

ב-Coddy לומדים דרך כתיבת קוד אמיתי בדפדפן: שיעורים אינטראקטיביים, משוב מיידי ועזרה מ-AI כשנתקעים.

מה זה URL encoder?

URL encoder (שנקרא גם percent-encoder או URI encoder) מחליף תווים שמורים או לא בטוחים ב-URL בסימן % ואחריו שתי ספרות hex. מפתחים משתמשים בו כשהם בונים query strings, מבצעים escape למקטעי נתיב, משתפים כתובות עם רווחים או תווים שאינם ASCII (כמו עברית) ומדבגים הפניות.

כתובות URL מוגבלות לקבוצה קטנה של תווי ASCII. כל מה שמחוץ לקבוצה הזאת, רווחים, אותיות עם סימנים, עברית, אימוג'י או סימנים שמורים כמו ?, #, &, = כשהם משמשים כנתונים, חייב לעבור percent-encoding כדי לשרוד את הדרך מהדפדפן לשרת.

ב-JavaScript יש שתי פונקציות קידוד: encodeURI (שומרת על מבנה ה-URL: /, ?, #, &) ו-encodeURIComponent (מקודדת את כל התווים השמורים). השתמשו ב-encodeURIComponent ל*ערכים* שאתם מכניסים ל-query string, וב-encodeURI ל*כתובות שלמות* שאתם רוצים שימשיכו לעבוד.

מה תלמדו תוך כדי קידוד URL

  • Percent-encoding מחליף בית אחד ב-% ועוד שתי ספרות hex. למשל, רווח הופך ל-%20.
  • לתווים שמורים (: / ? # & = +) יש משמעות במבנה ה-URL. צריך לקודד אותם כשהם משמשים כנתונים ולא כמפרידים.
  • טקסט שאינו ASCII (אותיות עם סימנים, עברית, אימוג'י, קירילית, CJK) הופך קודם לבתים של UTF-8, ואז כל בית עובר percent-encoding.
  • encodeURI שומרת על מבנה ה-URL, ו-encodeURIComponent מקודדת כל תו שמור. השתמשו בפונקציה הנכונה במקום הנכון.

איך מקודדים ומפענחים URL, שלב אחר שלב

  1. בחרו כיוון

    בחרו קידוד אם יש לכם טקסט גולמי ואתם רוצים שיהיה בטוח ל-URL. בחרו פענוח אם יש לכם מחרוזת מקודדת עם % ואתם רוצים לקבל בחזרה את הטקסט המקורי.

  2. בחרו את מצב הקידוד

    בחרו encodeURIComponent (מקודדת כל תו שמור) לערכים של query string, ו-encodeURI (שומרת על המבנה) לכתובות שלמות.

  3. הדביקו את הקלט

    הדביקו את הטקסט הגולמי או את ה-URL המקודד. קלט של כמה שורות עובד לפענוח של כמה ערכים בבת אחת.

  4. העתיקו את התוצאה

    העתיקו את הערך המקודד או המפוענח. ההמרה רצה מקומית בדפדפן שלכם, כך שמידע רגיש בכתובות נשאר במחשב שלכם.

מדריך מהיר לקידודי URL נפוצים

התווים שתראו מקודדים הכי הרבה, עם הצורה המקודדת שלהם. המשמעות של התווים השמורים מוגדרת ב-RFC 3986.

תומקודדלמה
רווח%20רווחים אסורים ב-URL
!%21שמור אצל חלק מהשרתים
#%23מסמן את תחילת ה-fragment
$%24תו שמור
&%26מפריד בין פרמטרים ב-query
+%2Bמייצג רווח בגופי בקשה מסוג form-encoded
/%2Fמפריד נתיב
:%3Aמפריד בין ה-scheme ל-host
=%3Dמפריד בין מפתח לערך ב-query string
?%3Fמסמן את תחילת ה-query string
@%40מפריד בין userinfo ל-host
בית UTF-8%C3%A9כל בית שאינו ASCII מקודד בנפרד

דוגמאות לקידוד URL לנסות

קידוד של שאילתת חיפוש

גולמי

hello world & more

מקודד

hello%20world%20%26%20more

רווחים הופכים ל-%20, וה-& הופך ל-%26 כדי שלא יתבלבל עם מפריד בין פרמטרים.

קידוד של תווים שאינם ASCII

גולמי

café

מקודד

caf%C3%A9

é היא רצף הבתים 0xC3 0xA9 ב-UTF-8, ולכן לצורה המקודדת יש *שתי* קבוצות %XX בשביל התו היחיד הזה. אותו דבר קורה לכל אות עברית.

encodeURI מול encodeURIComponent

גולמי

https://example.com/path?q=hello world

encodeURI

https://example.com/path?q=hello%20world

encodeURIComponent

https%3A%2F%2Fexample.com%2Fpath%3Fq%3Dhello%20world

encodeURI שומרת על מבנה ה-URL (לוכסנים, ?, =). encodeURIComponent מקודדת כל תו שמור: השתמשו בה על ערכים שאתם מכניסים ל-query string, ולעולם לא על URL שלם.

טעויות נפוצות בקידוד URL

  • שימוש ב-encodeURI לערכים של query string: ה-& וה-= שורדים את הקידוד ושוברים את פענוח הפרמטרים.
  • קידוד של URL פעמיים. %2520 במקום %20 הוא הסימן הקלאסי לבאג של קידוד כפול.
  • שוכחים ש-+ מייצג רווח בגופי בקשה מסוג application/x-www-form-urlencoded, אבל הוא + רגיל בנתיב או ב-query של URL.
  • שרשור קלט גולמי של משתמשים לתוך URL בעזרת אינטרפולציה של מחרוזות. תמיד קודדו את הערך קודם.
  • הנחה ש-decodeURIComponent מקבלת כל מחרוזת: היא זורקת שגיאה על % בודד שלא באות אחריו שתי ספרות hex.

שאלות נפוצות על קידוד URL

מה זה קידוד URL?
קידוד URL (שנקרא גם percent-encoding) הוא דרך לייצג תווים שיש להם משמעות מיוחדת ב-URL, או שלא בטוח לשדר אותם, על ידי החלפתם ב-% ואחריו שתי ספרות hex.
מה ההבדל בין encodeURI ל-encodeURIComponent?
encodeURI שומרת על תווי המבנה של ה-URL (/, ?, #, &, =, +). encodeURIComponent מקודדת את כולם, וזה בדיוק מה שצריך ל*ערכים* בודדים שנכנסים לתוך URL: ערכי פרמטרים ב-query, מקטעי נתיב ו-fragments. ראו את התיעוד של MDN על encodeURI ועל encodeURIComponent.
למה רווח הופך ל-%20?
רווחים אסורים ב-URL, ולכן מחליפים אותם ב-%20, ה-percent-encoding של תו הרווח ב-ASCII (0x20 ב-hex).
מתי צריך לקודד URL?
קודדו כל ערך דינמי או ערך שהמשתמש הזין לפני שאתם מכניסים אותו ל-URL: ערכי query string, מקטעי נתיב, יעדי הפניה ופרמטרים של OAuth. לעולם אל תניחו שקלט גולמי בטוח ל-URL.
אפשר להפוך קידוד URL?
כן, זה פענוח URL. decodeURI, decodeURIComponent או כל URL decoder הופכים את ה-percent-encoding בחזרה לתווים המקוריים.

למידע נוסף

כלי פיתוח נוספים

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל