Cómo usar el codificador y decodificador de URL
- Elige Codificar o Decodificar.
- Elige un modo: componente para un único valor de consulta o segmento de ruta, o URL completa para mantener intacta la estructura de la URL (
:,/,?,&). - Pega tu texto o URL y copia el resultado.
Todo se procesa en tu navegador. Las URL suelen llevar tokens y datos personales en la cadena de consulta, y nada de eso se sube ni se guarda.
¿Qué es la codificación por porcentaje?
Las URL solo pueden contener un conjunto limitado de caracteres ASCII. La codificación por porcentaje (percent-encoding), definida en el RFC 3986, representa cualquier otro byte como un signo de porcentaje seguido de dos dígitos hexadecimales. Primero el texto se convierte en bytes UTF-8 y después cada byte que hay que escapar se escribe como %XX:
café & crème → caf%C3%A9%20%26%20cr%C3%A8me
Aquí é ocupa dos bytes UTF-8 (C3 A9), el espacio se convierte en %20 y el ampersand en %26.
Caracteres reservados y no reservados
| Grupo | Caracteres | Significado |
|---|---|---|
| No reservados | A–Z a–z 0–9 - . _ ~ | Nunca hay que codificarlos. |
| Reservados: gen-delims | : / ? # [ ] @ | Separan las partes principales de una URL. |
| Reservados: sub-delims | ! $ & ' ( ) * + , ; = | Delimitan datos dentro de una parte, como & y = en las cadenas de consulta. |
Los caracteres reservados deben codificarse cuando aparecen como datos y no como delimitadores. Una búsqueda de R&D tiene que enviarse como q=R%26D; si no, el servidor ve un segundo parámetro llamado D.
encodeURIComponent vs. encodeURI
JavaScript ofrece dos funciones, y elegir la equivocada es una fuente frecuente de errores:
encodeURIComponent()codifica todo exceptoA–Z a–z 0–9 - _ . ! ~ * ' ( ). Úsala para valores individuales: parámetros de consulta, segmentos de ruta, datos del fragmento.encodeURI()deja además sin tocar; , / ? : @ & = + $ #, así que puede aplicarse a una URL completa sin romper su estructura. No protegerá un valor que contenga&o#.
encodeURI("https://example.com/a b?q=R&D")
// "https://example.com/a%20b?q=R&D" (& sin tocar)
"https://example.com/search?q=" + encodeURIComponent("R&D")
// "https://example.com/search?q=R%26D"
Mejor aún: deja que URLSearchParams o la biblioteca de URL de tu lenguaje construya las cadenas de consulta por ti.
Errores habituales
+ frente a %20
Los formularios HTML enviados como application/x-www-form-urlencoded codifican el espacio como +. En las URL del RFC 3986, + es un signo más literal y el espacio es %20. Un decodificador que no sepa qué convención se usó puede convertir C++ en C o dejar + en lugar de los espacios. Para ir sobre seguro, codifica un signo más real como %2B.
Python: urllib.parse.quote("a b&c") → a%20b%26c
urllib.parse.quote_plus("a b&c") → a+b%26c
Doble codificación
Codificar una cadena ya codificada escapa los propios signos de porcentaje: %20 se convierte en %2520. Suele ocurrir cuando tu código codifica un valor y luego un framework o un cliente HTTP lo vuelve a codificar. Si ves %25 en una URL, sospecha de una doble codificación. Decodificar dos veces es igual de dañino: puede convertir un %41 literal de los datos del usuario en A.
Codificar la URL entera como componente
Aplicar encodeURIComponent a una URL completa escapa :// y cada /, lo que da https%3A%2F%2F.... Eso solo es correcto cuando la propia URL es el valor de un parámetro, como un redirect_uri.
Consejos
- Los dígitos hexadecimales de la codificación por porcentaje no distinguen mayúsculas y minúsculas, pero el RFC 3986 recomienda mayúsculas (
%2F, no%2f). - Los nombres de dominio internacionalizados no se codifican por porcentaje; usan Punycode (
xn--). - ¿Necesitas transportar datos binarios en una URL? El Base64 apto para URL es más compacto que codificar por porcentaje cada byte.
- Comprueba cómo trata un servidor tu petición codificada con el comprobador de cabeceras HTTP.
Preguntas frecuentes
¿Por qué el espacio a veces es + y a veces %20?
+ viene de la codificación de formularios HTML que se usa en las cadenas de consulta y en los cuerpos POST; %20 es la codificación general del RFC 3986, válida en cualquier parte de una URL. Si tienes dudas, usa %20.
¿Qué caracteres nunca hay que codificar?
Los del conjunto no reservado: letras, dígitos, guion, punto, guion bajo y virgulilla. Todo lo demás debe codificarse cuando forma parte de un valor.
¿La codificación de URL es una medida de seguridad?
No. Solo hace que los datos sean sintácticamente seguros dentro de una URL y es totalmente reversible. Por sí sola no oculta datos ni evita inyecciones.
¿Cómo decodifico una URL con secuencias %uXXXX?
%uXXXX es un formato no estándar que genera la función obsoleta de JavaScript escape(). Los decodificadores estándar lo rechazan; hay que convertirlo aparte.
Actualizado