Koda frågesträngsparametrar på rätt sätt
Verktyget har två lägen. Komponent (encodeURIComponent) är för ett enskilt parameternamn eller värde; Fullständig URL (encodeURI) är för en hel URL vars struktur redan är korrekt. Att blanda ihop dem är den vanligaste orsaken till trasiga frågesträngar.
Genomräknat exempel
Fullständig URL lämnar & kvar i värdet, så servern läser två parametrar i stället för en.
- Indata
- https://example.com/search?q=salt & pepper&page=2
- Resultat ·
encodeURI() - https://example.com/search?q=salt%20&%20pepper&page=2
Parametrar som servern läser
- "q" = "salt "
- " pepper" = ""
- "page" = "2"
Om värdet först kodas i läget Komponent förblir det en enda parameter.
- Indata
- salt & pepper
- Resultat ·
encodeURIComponent() - salt%20%26%20pepper
https://example.com/search?q=salt%20%26%20pepper&page=2
Parametrar som servern läser
- "q" = "salt & pepper"
- "page" = "2"
Läget Komponent jämfört med Fullständig URL, tecken för tecken
| Tecken | Komponent | Fullständig URL |
|---|---|---|
| : | %3A | : |
| / | %2F | / |
| ? | %3F | ? |
| # | %23 | # |
| & | %26 | & |
| = | %3D | = |
| + | %2B | + |
| ␠ | %20 | %20 |
| é | %C3%A9 | %C3%A9 |
Så hanterar verktyget det
- Koda varje parameternamn och värde separat i läget Komponent, som kodar om & = ? # + och /.
- Foga ihop de kodade paren som namn=värde med & emellan och lägg till resultatet efter ? i URL:en.
- Använd Fullständig URL bara på en hel URL: läget lämnar : / ? # & = + orörda och kan därför inte skydda ett värde som innehåller dem.