Encode URL em JavaScript: 3 maneiras que salvarão seu site

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que a codificação de URL não é teoria chata, mas sim a salvação da sua aplicação

Imagine a situação: você está escrevendo uma aplicação web em JavaScript, o usuário insere uma consulta de pesquisa "JavaScript & Node.js: melhores práticas". Você passa esse texto na URL como um parâmetro de requisição GET. Abre o console do navegador — e lá está um erro. Ou, pior ainda, — a requisição é enviada, mas o servidor não a entende, e em vez de resultados de pesquisa, o usuário vê uma página vazia.

Familiar? Se sim — este artigo é para você. Se não — ainda assim é para você, porque mais cedo ou mais tarde você vai se deparar com isso. O tópico de codificação de URL em JavaScript é uma das perguntas mais populares no Stack Overflow (dezenas de milhares de visualizações), e não é à toa. É aquele pequeno detalhe que diferencia um desenvolvedor profissional de um iniciante.

Hoje vamos abordar três maneiras de codificar URLs em JavaScript, aprender a escolher a ferramenta certa para cada tarefa e ver exemplos reais da vida de um desenvolvedor web. Vamos lá!

O que é codificação de URL e por que ela é necessária

Antes de escrever código, vamos entender a teoria. Uma URL (Uniform Resource Locator) tem uma estrutura rigorosa. Apenas certos caracteres são permitidos: letras latinas, dígitos e alguns caracteres especiais (-, _, ., ~). Já espaços, cirílico, caracteres como &, ?, # e outros — são proibidos.

Quando tentamos passar esses caracteres em uma URL, o navegador ou servidor pode interpretar a requisição incorretamente. Por exemplo, o caractere & na string de consulta separa os parâmetros uns dos outros. Se ele aparecer dentro do valor de um parâmetro — a lógica quebra.

A solução — codificação de URL (codificação percentual). Caracteres proibidos são substituídos por uma sequência do tipo %XX, onde XX é o código hexadecimal do caractere na codificação UTF-8. Por exemplo, o espaço se torna %20, e o "а" cirílico se torna %D0%B0.

Em JavaScript, existem três mecanismos embutidos para isso. Vamos analisar cada um.

Maneira 1: encodeURI() — para URLs completas

A função encodeURI() é projetada para codificar uma URL completa. Ela substitui todos os caracteres, exceto aqueles que fazem parte da sintaxe do URI: :, /, ?, #, &, = e outros.

Sintaxe

encodeURI(uri)

Exemplo

const url = "https://pythonlib.ru/search?q=JavaScript & Node.js";
const encoded = encodeURI(url);
console.log(encoded);
// Resultado: "https://pythonlib.ru/search?q=JavaScript%20&%20Node.js"

Observe: encodeURI() codificou os espaços, mas não tocou nos caracteres &, ? e =. Isso é correto para uma URL completa, mas perigoso para parâmetros. Se em nossa consulta houvesse um caractere & dentro do valor do parâmetro, ele teria permanecido como está e quebrado a string de consulta.

Quando usar

  • Quando precisar codificar uma URL inteira (por exemplo, para passar para window.location)
  • Quando a URL não contém dados do usuário com caracteres potencialmente perigosos

Quando NÃO usar

  • Para codificar parâmetros de consulta individuais
  • Se a URL contiver entrada do usuário (formulários, pesquisa, comentários)

Maneira 2: encodeURIComponent() — para parâmetros e valores

Esta é sua principal ferramenta do dia a dia. encodeURIComponent() codifica todos os caracteres, exceto letras, dígitos e -, _, ., ~. Ela codificará até mesmo os caracteres que fazem parte da sintaxe do URI — &, ?, =, # e assim por diante.

Blogs

Book Recommendations