Analizar query string

Pega un query string — o una dirección entera, y se saca el query de ella — y obtén una línea por parámetro con el valor decodificado. Las claves repetidas se conservan como líneas propias en lugar de que la última pise a las anteriores, porque ahí es justamente donde suele estar la información que se busca.

Desactivado por defecto: el sentido de la página es poder leerlos.

Resultado

La respuesta aparece aquí mientras escribes.

  • Dónde se ejecuta

    No se sube nada, porque no hay archivo: se calcula en esta misma página.

  • Sin cola y sin cuenta

    Responde tan rápido como dé tu máquina, y nunca pregunta quién eres.

  • Tantas veces como quieras

    No se cuenta nada ni se limita nada: volver a responder no nos cuesta nada.

Cómo funciona

  1. Pega el query string o la URL entera.
  2. Lee los parámetros línea a línea. Si necesitas la forma cruda, desactiva la decodificación.
  3. No se ha subido nada.

Las claves repetidas se conservan

Un query string puede llevar el mismo nombre varias veces, y `etiqueta=a&etiqueta=b` es la forma habitual de una selección múltiple. Quien lo cargue en un diccionario pierde todo salvo el último valor — una pérdida de datos que ninguna advertencia señala.

Aquí cada aparición tiene su propia línea. Importa más de lo que suena, porque los frameworks no se ponen de acuerdo: PHP quiere `etiqueta[]=a&etiqueta[]=b`, Rails interpreta los corchetes de otra manera y Express tiene varios modos. Si una selección múltiple llega a medias, el motivo está casi siempre aquí.

Basta con un fragmento

La entrada no tiene que ser una dirección entera. Un query string con el interrogante inicial o sin él funciona igual que una URL completa, de la que entonces se extrae el query — cómodo, porque lo que uno copia de una exportación de analítica o de un registro rara vez es la línea completa.

Se reconoce por si aparece un interrogante o un signo igual. Una entrada sin ninguno de los dos no es un query string sino texto corriente, y no se trata como tal — una regla que suena obvia y sin la cual una URL entera se leería como un único nombre de parámetro.

Por qué el signo más se convierte en espacio

En un query string, `+` significa tradicionalmente espacio. Viene de `application/x-www-form-urlencoded`, el formato con el que envían los formularios HTML, y es anterior a la especificación actual de URL; ha sobrevivido porque los formularios lo siguen usando.

La consecuencia es una trampa: un signo más de verdad dentro de un valor hay que escribirlo `%2B` o desaparece. Afecta sobre todo a los números de teléfono en formato internacional y a los correos con subdirección — un `[email protected]` se convierte al leerlo en `a [email protected]`, y la entrega falla en un punto al que nadie mira.

URL dentro de un valor

Un destino de redirección como parámetro es el caso más común de codificación anidada: el valor de `siguiente` es a su vez una URL cuyas barras e interrogantes tienen que ir escapados para que no descompongan la dirección exterior. Al decodificar vuelve a ser una dirección legible.

Aquí se ve también si alguien ha codificado dos veces: si en el valor decodificado sigue habiendo un `%2F`, la entrada había pasado dos veces por un codificador. Y quien reciba una redirección así debería contrastar el destino con una lista de hosts permitidos — las redirecciones abiertas nacen exactamente en este punto.

Para qué sirve la vista cruda

Por defecto los valores se decodifican, que es el sentido de la página. El interruptor para la forma cruda no es un adorno: si se calcula una firma sobre el query string, lo que cuenta es la escritura codificada exacta, y una diferencia entre `%20` y `+` decide entre aceptar y rechazar.

Es igual de útil para buscar doble codificación. Un `%2520` en el valor crudo es la prueba inequívoca de que en algún punto de la cadena se ha vuelto a codificar un valor ya codificado; en el resultado decodificado de eso solo queda un `%20` sospechoso.

Los parámetros UTM que aparecen en todas partes

`utm_source`, `utm_medium`, `utm_campaign`, `utm_term` y `utm_content` vienen de Urchin, la herramienta de la que salió Google Analytics — de ahí el nombre. No hacen nada en el servidor: son texto que lee un script de medición en el navegador.

Como no hacen nada, se pueden quitar sin consecuencias al reenviar un enlace, si no quieres mezclar la estadística de quien te lo mandó con la tuya. Y como van en la dirección, acaban en historiales, en enlaces compartidos y en marcadores — la razón de que algunos enlaces de newsletter sean absurdamente largos.

Lo que no pinta nada en un query string

Las direcciones acaban en el registro del servidor, en el historial del navegador, en la cabecera de referrer del siguiente clic y a menudo en el registro de un proxy por el camino. Una contraseña, una clave de sesión o un token en un parámetro está por tanto guardado en al menos cuatro sitios en los que nadie pensó.

Para los enlaces de confirmación y de restablecimiento, donde no hay manera de evitarlo, la regla es: vigencia corta, un solo uso, y quitarlo de la dirección nada más abrirlo. Si aquí ves un valor con pinta de secreto, ese es el hallazgo — no el hecho de que se haya podido decodificar.

Valores vacíos y claves sin igual

Un `?debug` sin valor, un `?a=` con valor vacío y un parámetro ausente son tres cosas distintas, y los frameworks las tratan de manera distinta: unas veces como cadena vacía, otras como `true`, otras como inexistente. Aquí se muestran tal y como están en la cadena.

Es más relevante de lo que parece. Un interruptor que se pasa como nombre a secas llega en algunos lenguajes como valor vacío y allí se evalúa como falso — el parámetro está puesto, la función no se activa, y en ningún registro consta nada llamativo.

Qué significa esto para el RGPD

Los query strings de registros y de exportaciones de analítica llevan con frecuencia datos personales: términos de búsqueda, correos como parámetro, identificadores asociables a una cuenta. Como aquí se descompone en la propia página, nada de eso sale de tu equipo.

Es la condición para poder mirar una exportación así con una herramienta online. Un servicio que la descompusiera en un servidor habría recibido la línea y la tendría en sus registros — con justo la clase de datos cuya cesión es el motivo de la mayoría de las políticas internas.

Analizar query string: preguntas frecuentes

¿Tengo que pegar una URL entera?

No. Basta un query string, con el interrogante inicial o sin él. Si pegas una dirección completa, se extrae el query de ella.

¿Por qué mi signo más se ha convertido en espacio?

Porque en un query string el + significa espacio por herencia de la codificación de formularios. Un más de verdad hay que escribirlo %2B o desaparece. Afecta sobre todo a teléfonos internacionales y a correos con subdirección.

¿Qué pasa con las claves repetidas?

Cada aparición tiene su propia línea. Esa es la diferencia con cargarlo en un diccionario, donde se pierde todo menos el último valor — y ahí es donde está la información en una selección múltiple.

¿Para qué necesito la vista codificada?

Para firmas, donde cuenta la escritura codificada exacta, y para buscar doble codificación. Un %2520 en el valor crudo demuestra que en algún punto se ha vuelto a codificar un valor ya codificado.

¿Sale de mi equipo el query string?

No. Se descompone y se decodifica en esta página. Con líneas de registros y de exportaciones de analítica cuenta, porque llevan términos de búsqueda, identificadores y a veces tokens.

Otras herramientas