Čo je tento nástroj?
Kódovanie URL (percentové kódovanie) nahrádza znaky, ktoré nie sú v URL povolené, znakom % a ich bajtovou hodnotou v hexadecimálnej sústave — z medzery sa stane %20 a z 你 sa stane %E4%BD%A0. Bez toho by znaky ako medzery, &, ? a text mimo ASCII narúšali štruktúru URL alebo boli serverom nesprávne interpretované.
Existujú dve bežné potreby a tento nástroj podporuje obe: zakódovanie hodnoty, ktorá ide do parametra dopytu (režim komponentu — kóduje aj / ? & =), a zakódovanie celej URL pri zachovaní jej štruktúry (režim celej URL — ponecháva :// ? & nedotknuté).
Jedna historická zvláštnosť, o ktorej stojí za to vedieť: medzera je podľa štandardu URL (RFC 3986) správne %20, ale HTML formuláre ju tradične kódovali znakom plus namiesto toho — preto vidíte v praxi aj q=hello%20world aj q=hello+world, a preto niekedy pri dekódovaní formulárových dát treba znak + spracovať osobitne.
Prečo ho používať?
- Bezpečne zostavte dopytové reťazce — vstup od používateľa s &, = alebo medzerami neprelomí vašu URL.
- Dekódujte dlhé zakódované URL z logov, analytiky alebo presmerovacích reťazcov, aby ste videli, čo skutočne hovoria.
- Správne spracovanie UTF-8 pre čínštinu, emoji a iný text mimo ASCII.
- Dva režimy, aby ste nechtiac nezakódovali : a / celej URL.
- Zadarmo, okamžité, žiadne nahrávanie.
Ako sa používa
- Vložte svoj text alebo URL do vstupného poľa.
- Vyberte režim: „Komponent“ pre hodnoty idúce do parametrov dopytu, „Celá URL“ pre kompletné URL.
- Kliknite na „Zakódovať“ alebo „Dekódovať“.
- Skopírujte výsledok.
Príklad
Vstup
https://example.com/search?q=hello world & 你好Výstup
Režim komponentu: https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world%20%26%20%E4%BD%A0%E5%A5%BD
Režim celej URL: https://example.com/search?q=hello%20world%20&%20%E4%BD%A0%E5%A5%BDRežim komponentu kóduje aj štruktúrne znaky; režim celej URL ich zachováva.
Bežné prípady použitia
- Zostavenie zdieľateľnej URL, kde vyhľadávaný výraz alebo hodnota filtra pochádza od používateľa a môže obsahovať medzery, & alebo iné špeciálne znaky.
- Dekódovanie dlhej sledovacej alebo presmerovacej URL z e-mailu alebo reklamnej kampane, aby ste pred kliknutím videli skutočný cieľ a parametre.
- Ladenie toho, prečo server nesprávne číta parameter dopytu — vinníkom je často vyhradený znak, ktorý mal byť zakódovaný, ale nebol.
- Príprava neanglickej hodnoty (čínština, japončina, arabčina atď.) na použitie v dopytovom reťazci URL.
encodeURIComponent vs encodeURI v praxi
Tieto priamo zodpovedajú dvom režimom tohto nástroja a zodpovedajú reálnym JavaScriptovým funkciám, ktoré vývojári už poznajú: encodeURIComponent (režim komponentu) kóduje všetko okrem malej množiny nevyhradených znakov, čo ho robí bezpečným pre akúkoľvek jednu hodnotu vkladanú do URL — toto použijete pre parameter dopytu, segment cesty alebo hodnotu fragmentu za mriežkou. encodeURI (režim celej URL) ponecháva štruktúrne znaky URL (:, /, ?, #, &, =) nedotknuté, pretože predpokladá, že kódujete celú, už štruktúrovanú URL, nie surovú hodnotu — jeho použitie na jednu hodnotu parametra by nezakódovalo znaky & alebo =, ktoré táto hodnota môže obsahovať, čo je najčastejšia chyba pri výbere nesprávneho režimu.
Vyhradené vs nevyhradené znaky
Špecifikácia URL (RFC 3986) delí znaky do dvoch skupín: nevyhradené znaky (písmená, číslice, - _ . ~) sú vždy bezpečné a nikdy sa nekódujú, zatiaľ čo vyhradené znaky (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) majú v štruktúre URL osobitný význam a treba ich kódovať len vtedy, keď sa objavujú ako doslovné dáta, nie ako štruktúrna interpunkcia. Presne preto existujú dva režimy — režim komponentu chráni vyhradené znaky ako dáta, režim celej URL zachováva vyhradené znaky ako štruktúru. Pochopenie tohto rozdielu je užitočnejšie než memorovanie, kedy použiť ktorý režim, keďže vysvetľuje, prečo je ten istý znak (napríklad &) niekedy zakódovaný a inokedy ponechaný, podľa toho, akú úlohu v konkrétnej URL zohráva.
Časté otázky
Kedy použiť režim komponentu a kedy režim celej URL?
Režim komponentu (encodeURIComponent) pri kódovaní jednej hodnoty, ktorá ide do parametra dopytu — kóduje /, ?, & a =, aby nemohli prelomiť URL. Režim celej URL (encodeURI) pri kódovaní kompletnej URL — zachováva štruktúrne znaky, aby URL naďalej fungovala.
Prečo sa objavilo %20 namiesto + pre medzery?
Oba sú platné v rôznych kontextoch. %20 je univerzálne percentové kódovanie medzery; + znamená medzeru iba vo vnútri dopytových reťazcov v staršom formáte application/x-www-form-urlencoded. Tento nástroj používa %20, ktoré funguje všade.
Prečo dekódovanie zlyhá s chybou?
Vstup obsahuje chybnú percentovú sekvenciu, napríklad % nenasledovaný dvomi hexadecimálnymi číslicami. Často sa to stane, keď bola URL odseknutá alebo dvakrát dekódovaná. Opravte alebo odstráňte chybnú sekvenciu %.
Čo je dvojité kódovanie?
Kódovanie už zakódovaného textu: %20 sa zmení na %2520, pretože samotné % sa zakóduje na %25. Ide o bežnú chybu — ak váš dekódovaný výstup stále obsahuje kódy %, dekódujte ešte raz.
Zvláda toto čínske znaky a emoji?
Áno. Text je zakódovaný ako UTF-8 bajty, takže 你好 sa zmení na %E4%BD%A0%E5%A5%BD a dokonale sa dekóduje späť — presne rovnaké správanie ako v prehliadačoch.