קידוד של שאילתת חיפוש
hello world & more
hello%20world%20%26%20more
רווחים הופכים ל-%20, וה-& הופך ל-%26 כדי שלא יתבלבל עם מפריד בין פרמטרים.
לקודד ולפענח רכיבי URL בבטחה.
עודכן לאחרונה
ב-Coddy לומדים דרך כתיבת קוד אמיתי בדפדפן: שיעורים אינטראקטיביים, משוב מיידי ועזרה מ-AI כשנתקעים.
URL encoder (שנקרא גם percent-encoder או URI encoder) מחליף תווים שמורים או לא בטוחים ב-URL בסימן % ואחריו שתי ספרות hex. מפתחים משתמשים בו כשהם בונים query strings, מבצעים escape למקטעי נתיב, משתפים כתובות עם רווחים או תווים שאינם ASCII (כמו עברית) ומדבגים הפניות.
כתובות URL מוגבלות לקבוצה קטנה של תווי ASCII. כל מה שמחוץ לקבוצה הזאת, רווחים, אותיות עם סימנים, עברית, אימוג'י או סימנים שמורים כמו ?, #, &, = כשהם משמשים כנתונים, חייב לעבור percent-encoding כדי לשרוד את הדרך מהדפדפן לשרת.
ב-JavaScript יש שתי פונקציות קידוד: encodeURI (שומרת על מבנה ה-URL: /, ?, #, &) ו-encodeURIComponent (מקודדת את כל התווים השמורים). השתמשו ב-encodeURIComponent ל*ערכים* שאתם מכניסים ל-query string, וב-encodeURI ל*כתובות שלמות* שאתם רוצים שימשיכו לעבוד.
% ועוד שתי ספרות hex. למשל, רווח הופך ל-%20.: / ? # & = +) יש משמעות במבנה ה-URL. צריך לקודד אותם כשהם משמשים כנתונים ולא כמפרידים.encodeURI שומרת על מבנה ה-URL, ו-encodeURIComponent מקודדת כל תו שמור. השתמשו בפונקציה הנכונה במקום הנכון.בחרו קידוד אם יש לכם טקסט גולמי ואתם רוצים שיהיה בטוח ל-URL. בחרו פענוח אם יש לכם מחרוזת מקודדת עם % ואתם רוצים לקבל בחזרה את הטקסט המקורי.
בחרו encodeURIComponent (מקודדת כל תו שמור) לערכים של query string, ו-encodeURI (שומרת על המבנה) לכתובות שלמות.
הדביקו את הטקסט הגולמי או את ה-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 מקודד בנפרד |
hello world & more
hello%20world%20%26%20more
רווחים הופכים ל-%20, וה-& הופך ל-%26 כדי שלא יתבלבל עם מפריד בין פרמטרים.
café
caf%C3%A9
é היא רצף הבתים 0xC3 0xA9 ב-UTF-8, ולכן לצורה המקודדת יש *שתי* קבוצות %XX בשביל התו היחיד הזה. אותו דבר קורה לכל אות עברית.
https://example.com/path?q=hello world
https://example.com/path?q=hello%20world
https%3A%2F%2Fexample.com%2Fpath%3Fq%3Dhello%20world
encodeURI שומרת על מבנה ה-URL (לוכסנים, ?, =). encodeURIComponent מקודדת כל תו שמור: השתמשו בה על ערכים שאתם מכניסים ל-query string, ולעולם לא על URL שלם.
encodeURI לערכים של query string: ה-& וה-= שורדים את הקידוד ושוברים את פענוח הפרמטרים.%2520 במקום %20 הוא הסימן הקלאסי לבאג של קידוד כפול.+ מייצג רווח בגופי בקשה מסוג application/x-www-form-urlencoded, אבל הוא + רגיל בנתיב או ב-query של URL.decodeURIComponent מקבלת כל מחרוזת: היא זורקת שגיאה על % בודד שלא באות אחריו שתי ספרות hex.% ואחריו שתי ספרות hex.encodeURI שומרת על תווי המבנה של ה-URL (/, ?, #, &, =, +). encodeURIComponent מקודדת את כולם, וזה בדיוק מה שצריך ל*ערכים* בודדים שנכנסים לתוך URL: ערכי פרמטרים ב-query, מקטעי נתיב ו-fragments. ראו את התיעוד של MDN על encodeURI ועל encodeURIComponent.%20?%20, ה-percent-encoding של תו הרווח ב-ASCII (0x20 ב-hex).decodeURI, decodeURIComponent או כל URL decoder הופכים את ה-percent-encoding בחזרה לתווים המקוריים.