Les URL n'autorisent qu'un jeu limité de caractères. Tout le reste — espaces, accents, &, =, ?, # — doit être percent-encodé : les octets UTF-8 du caractère sont écrits en paires hexadécimales %XX. Une espace devient %20, é devient %C3%A9.
La subtilité est le contexte : des caractères comme & et = sont légaux dans une URL mais servent de séparateurs de query string. Encoder une URL complète et encoder une valeur de paramètre sont deux opérations différentes — cet outil applique les règles « composant » (comme encodeURIComponent en JavaScript), ce qu'il faut pour des valeurs individuelles.
Le piège classique est le double encodage : encoder une valeur déjà encodée transforme %20 en %2520. Si une valeur décodée contient encore des séquences %, elle a probablement été encodée deux fois quelque part dans la chaîne.