Outras ferramentas
Codificação e decodificação URL
Ferramenta de codificação e decodificação URL, lida com caracteres especiais em URLs
Visao geral da ferramenta: Ferramenta de Codificação e Decodificação URL
A codificação URL (também conhecida como codificação percentual) é um mecanismo para codificar informações em URLs quando os dados contêm caracteres especiais ou não ASCII. Esta ferramenta fornece conversão bidirecional entre texto normal e formato codificado URL, essencial para desenvolvimento web e comunicação API.
O que é Ferramenta de Codificação e Decodificação URL?
Ferramenta de Codificação e Decodificação URL codifica ou decodifica parâmetros de URL para evitar problemas com caracteres especiais.
Como usar
- Cole a URL ou parâmetros.
- Escolha codificar/decodificar.
- Copie o resultado.
Casos de uso comuns
- Transmissão segura de parâmetros
- Depurar caracteres especiais em URLs
- Validação de parâmetros de API
❓ Perguntas frequentes
P1: Por que o resultado está incorreto?
R: Verifique o formato de entrada e as opções, e teste o exemplo se houver.
P2: E se a entrada for muito grande?
R: Divida os dados em partes menores para obter resultados mais estáveis.
P3: Como salvo a saída?
R: Use os botões de copiar ou baixar se a ferramenta oferecer.
✨ Características Principais
- 🔄 Conversão Bidirecional : Compatível com codificação e decodificação URL
- 🌐 Suporte Unicode : Lida corretamente com caracteres portugueses e símbolos especiais
- 📊 Múltiplos Formatos : Compatível com codificação de componentes URL e URL completa
- 📋 Cópia com Um Clique : Resultados podem ser copiados diretamente para uso
- ⚡ Processamento em Tempo Real : Conversão instantânea conforme a entrada
📖 Exemplos de Uso
Codificação de Texto Português
Entrada:
Olá, como está? Tudo bem!
URL Codificada:
Ol%C3%A1%2C%20como%20est%C3%A1%3F%20Tudo%20bem%21
Codificação de URL com Parâmetros
Entrada:
https://www.toolmi.com/buscar?q=ferramenta útil&categoria=desenvolvimento
URL Codificada:
https%3A//www.toolmi.com/buscar%3Fq%3Dferramenta%20%C3%BAtil%26categoria%3Ddesenvolvimento
Codificação de Dados JSON
Entrada:
{"nome": "João Silva", "email": "[email protected]"}
URL Codificada:
%7B%22nome%22%3A%20%22Jo%C3%A3o%20Silva%22%2C%20%22email%22%3A%20%22joao%40example.com%22%7D
🎯 Cenários de Aplicação
1. Desenvolvimento de APIs
// Cliente API com codificação automática de parâmetros
class ClienteAPI {
constructor(urlBase) {
this.urlBase = urlBase;
}
// Construir URL com parâmetros codificados
construirURL(endpoint, parametros = {}) {
const url = new URL(endpoint, this.urlBase);
// Adicionar parâmetros de consulta codificados
Object.entries(parametros).forEach(([chave, valor]) => {
if (valor !== null && valor !== undefined) {
url.searchParams.append(chave, valor);
}
});
return url.toString();
}
// Fazer requisição GET com parâmetros
async get(endpoint, parametros = {}) {
const url = this.construirURL(endpoint, parametros);
try {
const resposta = await fetch(url);
if (!resposta.ok) {
throw new Error(`Erro HTTP: ${resposta.status}`);
}
return await resposta.json();
} catch (erro) {
console.error('Erro na requisição GET:', erro);
throw erro;
}
}
// Fazer requisição POST com dados codificados
async post(endpoint, dados) {
const url = this.construirURL(endpoint);
try {
const resposta = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(dados)
});
if (!resposta.ok) {
throw new Error(`Erro HTTP: ${resposta.status}`);
}
return await resposta.json();
} catch (erro) {
console.error('Erro na requisição POST:', erro);
throw erro;
}
}
// Codificar dados para formulário
codificarFormulario(dados) {
const parametros = new URLSearchParams();
Object.entries(dados).forEach(([chave, valor]) => {
if (valor !== null && valor !== undefined) {
parametros.append(chave, valor);
}
});
return parametros.toString();
}
}
// Exemplo de uso
const api = new ClienteAPI('https://api.toolmi.com');
// Buscar usuários com filtros
const parametrosBusca = {
nome: 'João Silva',
email: '[email protected]',
cidade: 'São Paulo',
ativo: true
};
api.get('/usuarios', parametrosBusca)
.then(usuarios => {
console.log('Usuários encontrados:', usuarios);
})
.catch(erro => {
console.error('Erro na busca:', erro);
});
// Criar novo usuário
const novoUsuario = {
nome: 'Maria Santos',
email: '[email protected]',
bio: 'Desenvolvedora apaixonada por tecnologia!'
};
api.post('/usuarios', novoUsuario)
.then(resultado => {
console.log('Usuário criado:', resultado);
});
2. Manipulação de URLs
// Utilitário para manipulação avançada de URLs
class ManipuladorURL {
constructor(url) {
this.url = new URL(url);
}
// Adicionar ou atualizar parâmetro
definirParametro(chave, valor) {
this.url.searchParams.set(chave, valor);
return this;
}
// Remover parâmetro
removerParametro(chave) {
this.url.searchParams.delete(chave);
return this;
}
// Obter parâmetro decodificado
obterParametro(chave) {
return this.url.searchParams.get(chave);
}
// Obter todos os parâmetros
obterTodosParametros() {
const parametros = {};
for (const [chave, valor] of this.url.searchParams.entries()) {
parametros[chave] = valor;
}
return parametros;
}
// Limpar todos os parâmetros
limparParametros() {
this.url.search = '';
return this;
}
// Alterar domínio
alterarDominio(novoDominio) {
this.url.hostname = novoDominio;
return this;
}
// Alterar protocolo
alterarProtocolo(novoProtocolo) {
this.url.protocol = novoProtocolo;
return this;
}
// Adicionar fragmento de hash
definirHash(hash) {
this.url.hash = hash;
return this;
}
// Obter URL final
toString() {
return this.url.toString();
}
// Analisar componentes da URL
analisar() {
return {
protocolo: this.url.protocol,
dominio: this.url.hostname,
porta: this.url.port,
caminho: this.url.pathname,
parametros: this.obterTodosParametros(),
hash: this.url.hash,
urlCompleta: this.url.toString()
};
}
// Validar URL
static validar(url) {
try {
new URL(url);
return { valida: true };
} catch (erro) {
return {
valida: false,
erro: erro.message
};
}
}
// Comparar URLs (ignorando ordem dos parâmetros)
static comparar(url1, url2) {
try {
const u1 = new URL(url1);
const u2 = new URL(url2);
// Comparar componentes básicos
if (u1.protocol !== u2.protocol ||
u1.hostname !== u2.hostname ||
u1.port !== u2.port ||
u1.pathname !== u2.pathname ||
u1.hash !== u2.hash) {
return false;
}
// Comparar parâmetros (ignorando ordem)
const params1 = new Set(u1.searchParams.toString().split('&').sort());
const params2 = new Set(u2.searchParams.toString().split('&').sort());
if (params1.size !== params2.size) {
return false;
}
for (const param of params1) {
if (!params2.has(param)) {
return false;
}
}
return true;
} catch (erro) {
return false;
}
}
}
// Exemplos de uso
const manipulador = new ManipuladorURL('https://www.toolmi.com/buscar');
// Construir URL de busca
manipulador
.definirParametro('q', 'ferramenta de desenvolvimento')
.definirParametro('categoria', 'programação')
.definirParametro('ordenar', 'relevância')
.definirHash('resultados');
console.log('URL construída:', manipulador.toString());
// Analisar URL
const analise = manipulador.analisar();
console.log('Análise da URL:', analise);
// Validar URLs
console.log('URL válida:', ManipuladorURL.validar('https://www.toolmi.com'));
console.log('URL inválida:', ManipuladorURL.validar('não-é-uma-url'));
// Comparar URLs
const url1 = 'https://example.com?a=1&b=2';
const url2 = 'https://example.com?b=2&a=1';
console.log('URLs iguais:', ManipuladorURL.comparar(url1, url2)); // true
3. Sistema de Roteamento
// Sistema de roteamento com codificação URL
class SistemaRoteamento {
constructor() {
this.rotas = new Map();
this.middleware = [];
this.parametrosGlobais = new Map();
}
// Registrar rota
registrarRota(padrao, manipulador, opcoes = {}) {
const rota = {
padrao: this.compilarPadrao(padrao),
manipulador,
opcoes
};
this.rotas.set(padrao, rota);
return this;
}
// Compilar padrão de rota para regex
compilarPadrao(padrao) {
const parametros = [];
// Converter padrão como '/usuario/:id/perfil' para regex
const regex = padrao.replace(/:([^/]+)/g, (match, nomeParam) => {
parametros.push(nomeParam);
return '([^/]+)';
});
return {
regex: new RegExp(`^${regex}$`),
parametros
};
}
// Navegar para URL
async navegar(url, dados = {}) {
try {
const urlObj = new URL(url, window.location.origin);
const caminho = urlObj.pathname;
// Encontrar rota correspondente
const rotaCorrespondente = this.encontrarRota(caminho);
if (!rotaCorrespondente) {
throw new Error(`Rota não encontrada: ${caminho}`);
}
// Extrair parâmetros da URL
const parametros = this.extrairParametros(caminho, rotaCorrespondente.rota);
// Extrair parâmetros de consulta
const parametrosConsulta = {};
for (const [chave, valor] of urlObj.searchParams.entries()) {
parametrosConsulta[chave] = valor;
}
// Criar contexto de rota
const contexto = {
url: urlObj.toString(),
caminho,
parametros,
consulta: parametrosConsulta,
dados,
hash: urlObj.hash
};
// Executar middleware
for (const mw of this.middleware) {
await mw(contexto);
}
// Executar manipulador da rota
await rotaCorrespondente.rota.manipulador(contexto);
// Atualizar histórico do navegador
if (rotaCorrespondente.rota.opcoes.atualizarHistorico !== false) {
history.pushState(dados, '', url);
}
return contexto;
} catch (erro) {
console.error('Erro na navegação:', erro);
throw erro;
}
}
// Encontrar rota correspondente
encontrarRota(caminho) {
for (const [padrao, rota] of this.rotas.entries()) {
if (rota.padrao.regex.test(caminho)) {
return { padrao, rota };
}
}
return null;
}
// Extrair parâmetros da URL
extrairParametros(caminho, rota) {
const correspondencia = caminho.match(rota.padrao.regex);
const parametros = {};
if (correspondencia) {
rota.padrao.parametros.forEach((nomeParam, indice) => {
parametros[nomeParam] = decodeURIComponent(correspondencia[indice + 1]);
});
}
return parametros;
}
// Adicionar middleware
usar(middleware) {
this.middleware.push(middleware);
return this;
}
// Gerar URL para rota
gerarURL(padrao, parametros = {}, consulta = {}) {
let url = padrao;
// Substituir parâmetros na URL
Object.entries(parametros).forEach(([chave, valor]) => {
url = url.replace(`:${chave}`, encodeURIComponent(valor));
});
// Adicionar parâmetros de consulta
const urlObj = new URL(url, window.location.origin);
Object.entries(consulta).forEach(([chave, valor]) => {
urlObj.searchParams.set(chave, valor);
});
return urlObj.toString();
}
}
// Exemplo de uso
const roteador = new SistemaRoteamento();
// Middleware de autenticação
roteador.usar(async (contexto) => {
console.log(`Navegando para: ${contexto.caminho}`);
// Verificar autenticação se necessário
if (contexto.caminho.startsWith('/admin')) {
const token = localStorage.getItem('authToken');
if (!token) {
throw new Error('Acesso negado: autenticação necessária');
}
}
});
// Registrar rotas
roteador
.registrarRota('/', async (ctx) => {
console.log('Página inicial');
})
.registrarRota('/usuario/:id', async (ctx) => {
console.log(`Perfil do usuário: ${ctx.parametros.id}`);
console.log('Parâmetros de consulta:', ctx.consulta);
})
.registrarRota('/buscar', async (ctx) => {
console.log(`Buscar por: ${ctx.consulta.q}`);
});
// Navegar
roteador.navegar('/usuario/123?tab=perfil&edit=true')
.then(contexto => {
console.log('Navegação concluída:', contexto);
})
.catch(erro => {
console.error('Erro na navegação:', erro);
});
// Gerar URLs
const urlPerfil = roteador.gerarURL('/usuario/:id',
{ id: 'joão-silva' },
{ tab: 'configurações' }
);
console.log('URL gerada:', urlPerfil);
🔧 Detalhes Técnicos
Codificação Percentual
A codificação URL usa o formato %XX onde XX é o valor hexadecimal:
Caracteres Especiais Comuns:
- Espaço:
%20 !:%21":%22#:%23$:%24%:%25&:%26':%27(:%28):%29+:%2B
Caracteres Portugueses
Acentos e Caracteres Especiais:
á:%C3%A1à:%C3%A0ã:%C3%A3â:%C3%A2é:%C3%A9ê:%C3%AAí:%C3%ADó:%C3%B3ô:%C3%B4õ:%C3%B5ú:%C3%BAç:%C3%A7
💡 Dicas de Uso
- Parâmetros de Consulta : Sempre codificar valores de parâmetros de consulta
- Componentes de Caminho : Codificar segmentos de caminho que contêm caracteres especiais
- Dados de Formulário : Usar
application/x-www-form-urlencodedpara dados de formulário - APIs RESTful : Codificar IDs e parâmetros em URLs de API
⚠️ Notas Importantes
- Dupla Codificação : Evitar codificar URLs já codificadas
- Contexto Apropriado : Usar
encodeURIComponent()para parâmetros eencodeURI()para URLs completas - Decodificação : Sempre decodificar dados recebidos de URLs
- Validação : Validar URLs decodificadas para prevenir ataques
🚀 Como Usar
- Entrada de Dados : Digite o texto ou URL para codificar/decodificar
- Seleção de Operação : Escolha "Codificar" ou "Decodificar"
- Verificação dos Resultados : O resultado é exibido instantaneamente
- Uso de Cópia : Clique em "Copiar" para copiar o resultado
- Aplicação : Use em desenvolvimento web, APIs e manipulação de URLs
Dica : Esta ferramenta processa localmente no lado do cliente e não envia dados para o servidor, garantindo privacidade e segurança.