O que é codificação de URL
Uma URL só pode conter um conjunto limitado de caracteres seguros: letras, números e alguns símbolos como "-", "_", "." e "~". Qualquer outro caractere, como espaços, acentos, emojis ou símbolos especiais, precisa ser convertido para uma sequência no formato "%XX", onde XX é o código hexadecimal do caractere. Esse processo é chamado de percent-encoding, ou codificação de URL.
Componente vs URL completa: qual a diferença
A codificação de componente (usando encodeURIComponent em JavaScript) escapa praticamente todos os caracteres especiais, incluindo os que dão estrutura a uma URL, como ":", "/", "?", "&" e "=". Isso é o comportamento correto quando você está montando o valor de um único parâmetro que vai dentro de uma query string. Já a codificação de URL completa (usando encodeURI) preserva esses caracteres estruturais, porque nesse modo eles ainda têm uma função dentro do endereço completo, e só escapa os caracteres realmente inseguros, como espaços e acentos.
Exemplo prático
Codificando o texto "café & rock/pop" como componente, o resultado escapa até a barra e o "&", ficando algo como "caf%C3%A9%20%26%20rock%2Fpop". Já codificando a URL completa "https://exemplo.com/busca?q=café", o resultado preserva as barras e o ponto de interrogação, escapando apenas o "é" acentuado, o que mantém a URL funcional como endereço.
Quando usar cada modo de codificação
Use a codificação de componente sempre que estiver construindo o valor de um parâmetro individual que será inserido em uma query string, por exemplo, ao montar manualmente um link de busca com o termo digitado por um usuário. Use a codificação de URL completa quando precisar codificar um endereço inteiro que já vem com sua estrutura pronta, preservando barras, dois-pontos e pontos de interrogação, e corrigindo apenas os caracteres que não são seguros dentro de uma URL.
Decodificando URLs
Decodificar reverte o processo, transformando as sequências "%XX" de volta nos caracteres originais. É comum precisar decodificar uma URL para ler o valor real de um parâmetro capturado em um log de acesso, ou para depurar um link que não está funcionando como esperado.