Codificador/Decodificador URL
Codifica o decodifica URLs y cadenas de consulta con porcentaje
Procesando…
0.0
No se ha bloqueado: el resultado aparecerá cuando termine el cálculo.
Acerca de Codificador/Decodificador URL
En una URL solo caben ciertos caracteres. Los espacios, las letras con tilde o la ñ, y los caracteres que marcan estructura —? & = # /— deben escribirse como % seguido de dos dígitos hexadecimales cuando forman parte de un valor. Eso es la codificación porcentual, o codificación URL. “niño” se convierte en ni%C3%B1o porque la ñ ocupa dos bytes en UTF-8.
La herramienta tiene dos modos. Componente usa encodeURIComponent de JavaScript y codifica por completo una sola pieza, como un valor de consulta. URL completa usa encodeURI y trata la entrada como una dirección terminada, sin tocar sus caracteres estructurales. Elegir mal es la causa más común de enlaces rotos.
Los tres tipos de caracteres de la RFC 3986
La RFC 3986, la sintaxis genérica de URI, clasifica los caracteres en tres grupos. Los no reservados —letras, dígitos, - . _ ~— pueden aparecer siempre tal cual. Los reservados marcan estructura: los gen-delims (: / ? # [ ] @) separan las grandes partes de la URL y los sub-delims (! $ & ' ( ) * + , ; =) se usan dentro de ellas. Todo lo demás —espacios, caracteres no ASCII, %, comillas— debe codificarse.
La regla clave: un carácter reservado va literal cuando actúa como estructura y codificado cuando es dato. Si alguien busca “a&b”, ?q=a&b se lee como q=a más un segundo parámetro b; solo ?q=a%26b entrega el valor completo.
encodeURI frente a encodeURIComponent
encodeURIComponent (modo Componente) solo deja sin codificar letras, dígitos y - _ . ! ~ * ' ( ). encodeURI (modo URL completa) deja además ; , / ? : @ & = + $ #. Si pasas una dirección entera por Componente obtienes https%3A%2F%2F…, que ya no funciona como enlace. Si pasas un valor de consulta por URL completa, cualquier & o + que contenga sobrevive y estropea la consulta.
Una trampa realista: el término de búsqueda “C++ & Java”. Codificar la dirección completa en modo URL completa da ?q=C++%20&%20Java. El servidor lee q como “C ” (cada + se convierte en espacio) y trata “ Java” como otro parámetro sin nombre. Codificar solo el valor en modo Componente da C%2B%2B%20%26%20Java, que llega intacto. La regla práctica: arma tú el esqueleto de la URL y codifica en modo Componente cada valor que insertes.
Los cinco caracteres que encodeURIComponent no toca —! ' ( ) *— son sub-delims en la RFC 3986. A la mayoría de servidores les da igual, pero donde se exige codificación RFC 3986 estricta, como en las cadenas base de firma de OAuth 1.0, hay que escribirlos como %21 %27 %28 %29 %2A o la firma no coincidirá.
Espacio: ¿%20 o +?
Ambos, en sitios distintos. En la codificación porcentual de la RFC 3986 el espacio es %20. La convención del + viene del formato de formularios HTML application/x-www-form-urlencoded: cuando el navegador envía un formulario por GET, escribe los espacios de la consulta como +. URLSearchParams sigue las mismas reglas, así que q = “a b+c&d” se serializa como q=a+b%2Bc%26d.
Esta herramienta codifica con encodeURIComponent y por tanto escribe %20; los servidores leen ambos como espacio. Al decodificar aplica la regla de formularios y convierte + en espacio: en toda la entrada en modo Componente, y solo en la cadena de consulta (tras ?) en modo URL completa, porque en una ruta el + es simplemente un signo más. Consecuencia: si un valor con + (un token Base64, un teléfono como +34 600…) se metió sin codificar en una consulta, cuando llega al servidor ya es un espacio. Al revés, si decodificas una cadena que no es de formulario (un token Base64, por ejemplo), desactiva la opción “+ = espacio” y cada + se conserva.
Por qué falla la decodificación
Falla cuando un % no va seguido de dos dígitos hexadecimales (“100%” es el caso típico) o cuando los bytes no forman UTF-8 válido. Las URL antiguas codificadas en ISO-8859-1 provocan el segundo caso: ahí la ñ es el byte único %F1, que por sí solo no es UTF-8 válido. La herramienta avisa entonces de que el texto puede estar en una codificación heredada y, si los bytes también se leen bien como EUC-KR o Shift_JIS, muestra esas lecturas como sugerencia (%93%FA%96%7B → Shift_JIS: 日本). El otro clásico es la doble codificación: si vuelves a codificar a%20b, el % pasa a %25 y queda a%2520b. Si tras decodificar siguen apareciendo secuencias como %20, el valor se codificó dos veces.
Ejemplos
Un valor de consulta (Componente)
- Entrada
niño=1&x- Resultado
ni%C3%B1o%3D1%26x
La ñ pasa a dos bytes y = y & se codifican, así que todo queda como un único valor.
Dirección completa (URL completa)
- Entrada
https://example.com/search?q=東京&lang=ja- Resultado
https://example.com/search?q=%E6%9D%B1%E4%BA%AC&lang=ja
La estructura (:// ? & =) se conserva y solo se codifican los caracteres japoneses, 3 bytes UTF-8 cada uno.
El problema de C++
- Entrada
C++ & Java- Resultado
Componente: C%2B%2B%20%26%20Java / URL completa: C++%20&%20Java
Solo el resultado en modo Componente sobrevive dentro de una cadena de consulta.
Signos más al decodificar
- Entrada
a+b%2Bc (Componente, decodificar)- Resultado
a b+c
El + sin codificar sigue la regla de formularios y se vuelve espacio; solo %2B vuelve como signo más.
Doble codificación
- Entrada
a%20b (codificar)- Resultado
a%2520b
El propio % se codifica como %25. No codifiques un valor que ya está codificado.
Cómo se usa
- Elige Componente para un valor o segmento de ruta, URL completa para una dirección entera.
- Pega el texto a codificar o la cadena con % a decodificar.
- Con el botón de intercambio puedes devolver el resultado y comprobar que coincide con el original.
Preguntas frecuentes
¿Por qué una URL copiada se pega como ni%C3%B1o?
La barra de direcciones muestra los caracteres decodificados para que se lean bien, pero la URL que realmente se envía es la forma UTF-8 con codificación porcentual, y eso es lo que se copia. Decodifícala aquí para leerla.
Al decodificar aparece un error.
“Mal formada” significa que hay un % sin dos dígitos hexadecimales detrás. “No es UTF-8 válido” indica que la URL se codificó casi seguro en un juego de caracteres antiguo como ISO-8859-1, EUC-KR o Shift_JIS; la herramienta decodifica como UTF-8, pero muestra como sugerencia las lecturas en EUC-KR y Shift_JIS cuando los bytes encajan.
¿Uso %20 o + para los espacios?
En rutas, %20. En consultas ambos suelen leerse como espacio, pero %20 es correcto en todas partes.
En modo URL completa, %2B no se convierte en +.
Ese modo usa decodeURI, que deja intactos a propósito los escapes de caracteres reservados (%2B, %26, %3F…) para no alterar la estructura de la URL. Decodifica solo el valor en modo Componente para recuperar el +.
¿Qué caracteres nunca hace falta codificar?
Los no reservados de la RFC 3986: A–Z, a–z, 0–9 y - . _ ~.
Fuentes
- RFC 3986 — Uniform Resource Identifier (URI): Generic Syntax
- WHATWG URL Standard — application/x-www-form-urlencoded
- MDN — encodeURIComponent()
- MDN — encodeURI()
Revisado el: