# Codificar e decodificar URL online

> Codificar uma URL (percent-encoding) troca os caracteres que não podem aparecer em uma URL, como espaços e acentos, por sequências no formato %XX. Esta ferramenta codifica e decodifica tanto um trecho, como o valor de um parâmetro, quanto uma URL completa, e roda no seu navegador.

- Endereço oficial: https://pradev.com.br/url-encode-decode
- Categoria: Codificação e segurança
- Tipo: Codificador
- Atualizado em: 2026-09-30
- Autor: Leonardo Gaertner (https://pradev.com.br/sobre)
- Preço: grátis, sem cadastro. O processamento acontece no navegador de quem usa.

## Como usar

1. Escolha Codificar ou Decodificar.
2. Escolha Trecho (parâmetro) para o valor de um parâmetro ou URL completa para um endereço inteiro.
3. Cole o texto no campo de entrada e copie o resultado.

## Como funciona

Cada caractere fora do conjunto permitido é convertido para bytes UTF-8, e cada byte vira %XX em hexadecimal. Por isso o é de café vira %C3%A9, dois bytes, e o espaço vira %20.

No modo Trecho, os caracteres reservados também são codificados (como & ? = / # e +), o que é o certo para o valor de um parâmetro. No modo URL completa, esses caracteres são mantidos, para que o endereço continue funcionando.

Em formulários (application/x-www-form-urlencoded), o espaço costuma vir como +. Ao decodificar, marque Tratar + como espaço nesse caso. Na codificação padrão de URL, o + é um caractere comum.

### Exemplo de trecho com acento e símbolos

```text
Texto: café & pão
Codificado: caf%C3%A9%20%26%20p%C3%A3o
```

## Em código

Para codificar um valor de URL em código, use a função de componente (espaço vira %20). Para a query string inteira, use o montador da linguagem (espaço vira +).

```javascript
// Um valor dentro da URL (parâmetro, trecho do caminho): espaço vira %20
function codificarParametro(valor) {
  return encodeURIComponent(valor);
}

// A query string inteira, no formato de formulário: espaço vira +
function montarQuery(params) {
  return new URLSearchParams(params).toString();
}

// Ler a query string: o URLSearchParams entende tanto + quanto %20
function lerQuery(query) {
  return Object.fromEntries(new URLSearchParams(query));
}
```

_JavaScript_

```python
from urllib.parse import parse_qsl, quote, urlencode


def codificar_parametro(valor: str) -> str:
    return quote(valor, safe="")  # espaço vira %20; sem safe="", a barra passaria


def montar_query(params: dict) -> str:
    return urlencode(params)  # espaço vira +


def ler_query(query: str) -> dict:
    return dict(parse_qsl(query, keep_blank_values=True))
```

_Python_

```php
<?php
function codificarParametro(string $valor): string
{
    return rawurlencode($valor); // espaço vira %20
}

function montarQuery(array $params): string
{
    return http_build_query($params); // espaço vira +
}

function lerQuery(string $query): array
{
    parse_str($query, $params);
    return $params;
}
```

_PHP_

## Perguntas frequentes

### Qual a diferença entre codificar um trecho e uma URL completa?

Ao codificar um trecho, símbolos como / ? & = também são convertidos, para que o valor não interfira na estrutura da URL. Ao codificar uma URL completa, esses símbolos são preservados, senão o endereço deixaria de funcionar.

### O espaço é %20 ou +?

Na URL propriamente dita, é %20. O + como espaço vale só em dados de formulário (application/x-www-form-urlencoded), como nos parâmetros de uma consulta enviada por um form.

### Por que a decodificação dá erro?

Porque há um % sem os dois dígitos hexadecimais depois dele, ou uma sequência que não forma um caractere UTF-8 válido. Confira se o texto foi copiado por inteiro.

### O que é codificar duas vezes?

É aplicar a codificação a um texto que já estava codificado, então o % vira %25 (por exemplo, %20 vira %2520). Se o resultado tem %25, provavelmente houve dupla codificação: decodifique uma vez.

## Fontes

- [RFC 3986: sintaxe de URI](https://www.rfc-editor.org/rfc/rfc3986)
- [MDN: encodeURIComponent()](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent)

## Guias

- [Como gerar slug de URL a partir de texto com acentos](https://pradev.com.br/guias/como-gerar-slug-de-url-com-acentos): Como transformar um título com acentos em slug de URL (Ação e Reação vira acao-e-reacao) em JavaScript, Python e PHP, e os cuidados com slugs repetidos.
- [URL encode: como codificar parâmetros de URL sem quebrar nada](https://pradev.com.br/guias/url-encode-como-codificar-parametros): Quando usar encodeURIComponent ou encodeURI, por que o espaço vira + ou %20 e como codificar URL em JavaScript, Python e PHP, com código testado.

## Ferramentas relacionadas

- [Codificar Base64](https://pradev.com.br/codificar-base64): Converta texto para Base64 online, com suporte a acentos (UTF-8) e opção URL-safe. Grátis, no navegador, sem enviar seus dados.
- [Decodificar Base64](https://pradev.com.br/decodificar-base64): Decodifique Base64 para texto online, com suporte a UTF-8 e Base64 URL-safe. Grátis, direto no navegador, sem enviar seus dados.
- [Testador de Regex](https://pradev.com.br/regex-tester): Teste expressões regulares online: destaque dos casamentos, grupos e flags. Usa o motor do JavaScript. Grátis, direto no navegador.
- [Gerador de UUID](https://pradev.com.br/gerador-de-uuid): Gere UUID v4 aleatório com um clique: em lote, em maiúsculas, com ou sem hífens. Grátis, gerado no seu navegador.
- [Gerador de Senha](https://pradev.com.br/gerador-de-senha): Crie senhas fortes e aleatórias com o tamanho e os caracteres que quiser. Geradas no seu navegador, nunca enviadas nem armazenadas.
- [Decodificador JWT](https://pradev.com.br/decodificador-jwt): Decodifique um JWT online e veja header, payload e datas de exp, iat e nbf. O token não sai do navegador. Não verifica a assinatura.
