Analisar query string de URL em objeto chave-valor
Cole um link e veja o que ele carrega: San+Jos%C3%A9 vira San José, red+shoes vira red shoes, e um nome que se repete, como duas etiquetas, fica guardado como lista na ordem original. Códigos com % danificados são apontados, nunca adivinhados. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Este analisador transforma uma URL absoluta completa ou uma query string bruta em um objeto estruturado de chaves e valores. Ele decodifica escapes percentuais e sinais de adição usados por formulários, preserva valores vazios e reúne parâmetros repetidos em listas na ordem original. Escapes malformados e UTF-8 inválido geram um erro claro, sem substituição silenciosa de caracteres.
Escolha a forma de entrada adequada à sua origem
Você pode enviar uma URL absoluta completa, como <code>https://example.com/search? Em uma URL absoluta, somente o componente de consulta é analisado; esquema, autoridade, caminho e fragmento não viram campos. Uma URL sem consulta retorna um objeto de parâmetros vazio.
A entrada bruta é tratada integralmente como dados de consulta depois da remoção de um ponto de interrogação inicial opcional. Cada sinal & inicia um novo par, enquanto o primeiro sinal de igual separa o nome do valor. Um nome sem sinal de igual é preservado com valor vazio, assim como uma atribuição explicitamente vazia.
Segmentos vazios entre sinais & consecutivos são ignorados. O resultado também informa a quantidade de chaves distintas e de pares analisados, permitindo que você identifique campos repetidos sem precisar recontar o objeto.
Entenda a decodificação e as chaves repetidas
Nomes e valores são decodificados separadamente segundo as convenções normalmente aplicadas a formulários em consultas de URL. Um sinal de adição vira espaço, enquanto sequências <code>%HH</code> são interpretadas como bytes UTF-8. Assim, <code>city=San+Jos%C3%A9</code> produz texto Unicode legível, e um separador codificado como <code>%26</code> permanece dentro de um único valor em vez de iniciar outro campo.
A decodificação ocorre exatamente uma vez: <code>%2520</code> vira <code>%20</code>, não um espaço. Quando uma chave aparece uma vez, o valor é uma string. Se a mesma chave decodificada aparecer novamente, o valor vira uma lista que contém todas as ocorrências na ordem de origem.
Essa regra representa grupos de caixas de seleção, filtros, tags e outros controles de seleção múltipla sem descartar informações nem inventar propriedades numeradas. A repetição é determinada após a decodificação; portanto, grafias codificadas equivalentes do mesmo nome são agrupadas. Valores vazios repetidos também são preservados.
O analisador não infere booleanos, números ou datas e não interpreta a notação com colchetes como objetos aninhados. Todos os valores escalares continuam como strings para que o código seguinte aplique conscientemente sua própria conversão específica.
Interrompa dados corrompidos antes que entrem no fluxo
Analisadores permissivos podem manter um sinal de porcentagem isolado, aceitar um escape de apenas um dígito ou inserir um caractere substituto quando os bytes escapados não formam UTF-8 válido. Esses comportamentos fazem identificadores danificados parecerem utilizáveis e criam diferenças difíceis de explicar entre navegador, servidor e uma rotina de verificação de assinatura. Esta capacidade confere se cada sinal de porcentagem é seguido por exatamente dois dígitos hexadecimais e depois verifica se cada sequência de bytes decodificada representa UTF-8 válido.
Se qualquer condição falhar, a solicitação retorna um erro de entrada inválida, não um objeto parcial. O analisador é puro e determinístico: não acessa a rede, não segue redirecionamentos, não consulta o relógio, não usa aleatoriedade e não guarda estado entre chamadas. Trate as strings retornadas como dados, não como HTML, código, caminhos de arquivo ou expressões de banco de dados confiáveis; decodificar recupera caracteres, mas não torna seguro o uso posterior.
No navegador, a mesma lógica permite examinar rapidamente links copiados sem contatar o destino.
Casos de uso
Examinar uma URL copiada
Transforme uma URL longa de pesquisa, campanha ou callback em campos legíveis sem abrir nem contatar o destino.
Criar dados de teste determinísticos
Confirme com exatidão a decodificação, os valores vazios e as chaves repetidas em testes de integração e ingestão.
Perguntas frequentes
O que acontece quando uma chave aparece mais de uma vez?
Uma ocorrência produz uma string. Quando há repetição, o valor vira uma lista com todas as ocorrências na ordem original.
Os sinais de adição viram espaços?
Sim. Na codificação comum de formulários, o sinal de adição representa um espaço. Use %2B para manter um sinal de adição literal.
O analisador infere números ou booleanos?
Não. Todo valor escalar permanece como string, inclusive texto vazio, números e true ou false. Faça a conversão depois conforme o seu esquema.
Quais erros de codificação percentual são rejeitados?
São rejeitados sinais de porcentagem sem dois dígitos hexadecimais e sequências de bytes que não formam UTF-8 válido.
O que acontece com um nome sem valor, como flag?
Ele é mantido com valor vazio, do mesmo jeito que um nome seguido de sinal de igual sem nada depois. Já os trechos vazios entre dois & seguidos são ignorados, porque não trazem nenhum nome.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/web/query-string-parse \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="}'const res = await fetch("https://api.kit.forhosting.com/web/query-string-parse", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/query-string-parse",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/query-string-parse", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/query-string-parse", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"text": "https://example.com/search?q=red+shoes&tag=sale&tag=new&empty="
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.query_string_parse",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Você pode usá-lo no navegador para examinar um link ou chamar a API determinística por US$ 0,002 por item em aplicativos, testes e fluxos de ingestão que precisam sempre do mesmo resultado.
Escolha a forma de entrada adequada à sua origem
q=red+shoes</code>, uma consulta bruta, como <code>q=red+shoes&page=2</code>, ou essa mesma consulta com um ponto de interrogação no início. Isso é útil quando um framework, um log de acesso, um webhook ou uma API do navegador já separou a consulta do restante do endereço.
Interrompa dados corrompidos antes que entrem no fluxo
Em automações, a API custa US$ 0,002 por item e funciona como uma etapa estável de normalização antes de validar, encaminhar, comparar ou armazenar.
Casos de integração
Normalizar a entrada de um webhook
Analise uma consulta bruta antes da validação específica do aplicativo e preserve todos os valores de parâmetros repetidos.
Perguntas técnicas
Quanto custa uma solicitação pela API?
Cada item analisado custa US$ 0,002 pela API. A ferramenta interativa do navegador usa a mesma lógica determinística.