Codificar URL: preserve o valor sem quebrar o link
Um link pode funcionar até receber um nome com &, + ou espaço. O nome não é necessariamente inválido; alguns caracteres também têm função estrutural na URL.
Um valor não é a URL inteira
Codifique o valor do parâmetro para que & não inicie outro parâmetro e # não abra um fragmento. Já um endereço completo precisa manter seus separadores estruturais.
Escolha conforme a entrada: endereço inteiro, componente ou valor de formulário. O resultado certo num contexto não é automaticamente adequado a outro.
Referências: WHATWG URL Standard — Percent encoding and form encoding
O sinal + muda de sentido conforme o contexto
Em formulários, + representa espaço e %2B representa o sinal de mais literal. Num componente, o espaço costuma ser %20 e + não vira espaço automaticamente.
Não substitua todo + sem conhecer o formato de origem. Separe o valor original do usuário da forma usada para transportá-lo.
Referências: WHATWG URL Standard — Percent encoding and form encoding
Decodificar é uma etapa definida, não um ciclo de reparo
Decodificar 2 vezes pode mudar o significado. Descubra quantas camadas o sistema produziu em vez de repetir até o texto parecer familiar.
A ferramenta muda a representação textual; não visita nem verifica o destino. Link legível não comprova confiança, e codificar informação sensível não a esconde.
Exemplo: valor com +, espaços e &
A+B & C vira A%2BB%20%26%20C como componente. Em formulário, vira A%2BB+%26+C. Cada forma retorna ao valor original com a convenção de decodificação correspondente.
%252F vira %2F ao decodificar uma vez, e / na segunda. Isso pode alterar um caminho ou valor; repetir a decodificação não é limpeza segura por definição.