ToolActToolAct

Codificador/Decodificador URL

Codifica y decodifica URLs rápidamente con múltiples modos de codificación

Entrada
Caracteres: 0
Bytes: 0
Salida
Caracteres: 0
Bytes: 0

Selecciona Método de Conversión

¿Qué es la Codificación URL?

La codificación URL (también llamada codificación porcentual) es un mecanismo para convertir caracteres en un formato que pueda transmitirse de forma segura en una URL. Dado que las URL solo pueden contener ciertos caracteres del conjunto ASCII, otros caracteres (como caracteres acentuados, espacios y símbolos especiales) deben codificarse como %XX, donde XX es el valor hexadecimal del carácter. Por ejemplo: un espacio se codifica como %20, y el carácter ñ se codifica como %C3%B1. La codificación URL convierte caracteres en una forma segura para transmitirse dentro de URLs. Espacios, texto no ASCII, caracteres reservados y símbolos pueden percent-encoded según el contexto. Lo clave es distinguir una URL completa de un segmento de ruta, parámetro query, cuerpo de formulario o fragmento, porque cada posición tiene reglas distintas. Doble codificación o falta de codificación puede romper enlaces, APIs, firmas, redirecciones y parámetros de búsqueda.

Cómo usar

Cómo usar

  1. Introduce o pega el texto que quieras codificar o descodificar en el cuadro de entrada
  2. Selecciona el método de codificación: encodeURIComponent o encodeURI
  3. Los resultados aparecen al instante: cópialos con un clic o intercambia entrada y salida
  4. Para descodificar, elige el método de descodificación correspondiente

Contexto de URL

  • Usa la codificación por componente para valores de consulta y segmentos de ruta; codificar una URL completa con la función incorrecta puede romper separadores como /, ?, y &.
  • Al descodificar, comprueba si hay doble codificación, por ejemplo %2520, lo que indica que el signo de porcentaje se codificó otra vez.

Casos de uso

Codificar parámetros de consulta de forma seguraUsa el modo encodeURIComponent cuando un valor vaya dentro de un parámetro de consulta URL, segmento de ruta o payload similar a formulario. Codifica los caracteres reservados de forma más agresiva que encodeURI y muestra tanto el conteo de caracteres como de bytes. El resultado es lo que la mayoría de los analizadores del servidor esperan tras un signo de interrogación o dentro de un segmento JSON Pointer.
Codificar o decodificar URLs completasCambia a encodeURI o decodeURI cuando trabajes con una URL completa y quieras que los separadores como : / ? & conserven su significado estructural. Los modos de componente y URI completa se mantienen separados para evitar una sobre-codificación accidental. Esta es la opción correcta cuando la entrada ya parece una URL y solo las partes de datos de usuario necesitan ajustarse.
Recuperar texto legible a partir de escapes porcentualesDecodifica cadenas de componente o URI completa e intercambia la salida válida de vuelta a la entrada con el modo opuesto. Los errores de transformación por secuencias porcentuales mal formadas se muestran en la salida y se bloquean para el intercambio, lo que evita que un %XX incompleto contamine un copia-pega posterior. Los fragmentos con doble codificación como %2520 aparecerán como escapes anidados que requieren una segunda pasada de decodificación.
Inspeccionar cuerpos de formulario codificadosCambia a la vista application/x-www-form-urlencoded para ver cómo '+' y '%20' difieren para los espacios, y luego decodifica un payload x-www-form-urlencoded copiado desde DevTools para recuperar las claves originales. Esto también ayuda al leer el cuerpo de una solicitud POST para confirmar que el formulario realmente envió lo que el JavaScript del cliente pretendía. La RFC 3986 reserva una regla separada para cuerpos de formulario, razón por la cual '+' sobrevive en muchas APIs.
Distinguir caracteres reservados y no reservados según la RFC 3986Al depurar un desajuste de firma o un error 400 de una API estricta, el primer paso es comprobar si cada byte pertenece al conjunto reservado (gen-delims : / ? # [ ] @ y sub-delims !$&'()*+,;=) o al no reservado (A-Z a-z 0-9 - . _ ~). Los valores de consulta usan percent-encoding para caracteres reservados, mientras que los segmentos de ruta tratan '/' como estructural. Elegir %20 para espacios o '+' para cuerpos de formulario depende directamente de dónde se ubicará el valor codificado, por lo que una misma cadena puede legalmente aparecer en tres codificaciones distintas según la posición en la URL.

Principio técnico

La codificación URL (codificación porcentual) está definida por la RFC 3986 §2.1 y transforma caracteres al formato %XX, donde XX es la representación hexadecimal en mayúsculas de dos dígitos del valor del byte en UTF-8. La RFC define dos clases de caracteres: caracteres no reservados (A-Z a-z 0-9 - _ . ~) que nunca se codifican, y caracteres reservados (gen-delims : / ? # [ ] @ y sub-delims ! $ & ' ( ) * + , ; =) cuya codificación depende del contexto: tienen significado estructural en algunos componentes de la URL pero son datos literales en otros. JavaScript proporciona dos funciones integradas con alcances diferentes. encodeURIComponent() codifica cada carácter excepto A-Z a-z 0-9 - _ . ! ~ * ' ( ); esta es la elección correcta para codificar valores individuales de parámetros de consulta, segmentos de ruta e identificadores de fragmento. encodeURI() además preserva los caracteres estructurales : / ? # [ ] @ ! $ & ' ( ) * + , ; = y está diseñada para codificar URIs completas manteniendo su estructura sintáctica intacta. La distinción crítica es que encodeURIComponent() codifica / y &, lo que rompería una URL si se aplicara a toda la cadena, mientras que encodeURI() los preserva. El manejo de espacios es la trampa de interoperabilidad más común. La RFC 3986 especifica %20 como la codificación porcentual canónica para el carácter espacio (U+0020). Sin embargo, el tipo MIME application/x-www-form-urlencoded (usado por envíos de formularios HTML desde HTML 4.01) codifica espacios como +. Los dos no son intercambiables: un servidor que espera %20 interpretará + literalmente, y un servidor que espera + tratará %20 como un signo de porcentaje literal seguido de 20. La herramienta usa encodeURIComponent() que produce %20, coincidiendo con la RFC 3986. Los usuarios que decodifican payloads x-www-form-urlencoded (de cuerpos POST o cadenas de consulta analizadas por middleware heredado) deben ser conscientes de esta diferencia. El manejo de caracteres multibyte es automático pero vale la pena entenderlo: la cadena de entrada primero se codifica a bytes UTF-8, luego cada byte se codifica individualmente con percent-encoding. Un carácter CJK como '你' (U+4F60) ocupa 3 bytes UTF-8 (E4 BD A0), produciendo %E4%BD%A0. Si el servidor analiza con un juego de caracteres diferente como GBK, el mismo carácter se codifica como %C4%E3 (2 bytes), y el resultado decodificado será ilegible a menos que ambas partes acuerden UTF-8. La doble codificación es otro error común: %2520 significa un signo de porcentaje literal (%25) seguido de 20, indicando que la entrada ya estaba codificada en porcentaje y fue codificada una segunda vez. El modo de descodificación detecta secuencias mal formadas (%XX incompleto) y muestra el error en lugar de producir basura silenciosamente.

  • encodeURIComponent vs encodeURI: encodeURIComponent codifica / ? & # y es correcto para valores de consulta, segmentos de ruta y fragmentos; encodeURI preserva estos caracteres estructurales y es correcto para URLs completas; usar la función incorrecta es el error de codificación URL más común.
  • Juegos de caracteres reservados de la RFC 3986: gen-delims (: / ? # [ ] @) llevan sintaxis de URL; sub-delims (! $ & ' ( ) * + , ; =) pueden ser delimitadores o datos según el componente de la URL; el contexto determina si un carácter reservado se codifica en porcentaje.
  • Codificación de espacios: La forma canónica de la RFC 3986 es %20 (producida por encodeURIComponent); application/x-www-form-urlencoded usa + (predeterminado de formularios HTML); los dos son semánticamente incompatibles y mezclarlos rompe los analizadores del lado del servidor.
  • Codificación multibyte UTF-8: '你' (U+4F60) → bytes UTF-8 E4 BD A0 → %E4%BD%A0 (3 octetos codificados en porcentaje); el mismo carácter en GBK → %C4%E3 (2 octetos); el acuerdo de juego de caracteres entre cliente y servidor es obligatorio para texto no ASCII.
  • Detección de doble codificación: %2520 se decodifica primero a %20 y luego a espacio; la salida del modo de descodificación revela este patrón; secuencias mal formadas como %ZZ o %2 (incompleto) se detectan y reportan como errores.
  • IRI (RFC 3987): Los Identificadores de Recursos Internacionalizados permiten caracteres Unicode directamente en URLs; los navegadores muestran la forma decodificada en la barra de direcciones pero transmiten la forma UTF-8 codificada en porcentaje por el canal; el modo de codificación de la herramienta muestra lo que realmente se envía por HTTP.
  • Manejo de errores de decodeURIComponent: Pasar una cadena con una secuencia de porcentaje incompleta (% seguido de menos de 2 dígitos hexadecimales) lanza un URIError; la herramienta envuelve la llamada en try/catch y muestra el mensaje de error en lugar de devolver silenciosamente una cadena vacía.

Ejemplos

Codificar caracteres chinos (codificación porcentual UTF-8)

Entrada:  你好世界 (4 caracteres CJK, 12 bytes UTF-8)
Salida: %E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C

Cada byte UTF-8 (E4, BD, A0, ...) se convierte en %XX
RFC: RFC 3986 sección 2.1 define la codificación porcentual para URIs
Uso: parámetros de consulta, segmentos de ruta, envío de datos de formulario

Codificar separadores de query string

Entrada:  name=张三&age=20
Salida: name%3D%E5%BC%A0%E4%B8%89%26age%3D20

%3D codifica '=' (delimitador entre clave y valor)
%26 codifica '&' (delimitador entre parámetros)
RFC: RFC 3986 sección 3.4 define los caracteres reservados del componente query

Codificar una URL completa (codificación parcial)

Entrada:  https://example.com/search?q=你好&type=web
Salida: https://example.com/search?q=%E4%BD%A0%E5%A5%BD&type=web

Nota: el esquema, el host y los separadores existentes NO se codifican
Solo el valor de consulta no ASCII se codifica con porcentaje
RFC: RFC 3986 sección 3 define los componentes jerárquicos del URI

Codificar caracteres de espacio (dos convenciones)

Segmento de ruta:  %20 (conforme a RFC 3986)
Query string:  + (convención histórica de formularios HTML)

Ejemplo: /search for me -> /search%20for%20me
Ejemplo: q=hello world -> q=hello+world

Ambos decodifican al mismo resultado; encodeURI usa %20, encodeURIComponent usa %20 para la ruta y + para la consulta en algunas implementaciones

Preguntas frecuentes

¿Qué hace la codificación URL?

Sustituye los caracteres no seguros en URLs por secuencias %: espacio → %20, & → %26, # → %23, etc. El RFC 3986 lista qué caracteres son seguros (alfanuméricos más -, _, ., ~) y cuáles necesitan codificarse. Navegadores, servidores y librerías HTTP aplican o esperan codificación URL en los lugares correctos.

¿Cuál es la diferencia entre encodeURI y encodeURIComponent?

encodeURI mantiene intactos los caracteres de sintaxis URL (: / ? # & =): espera una URL completa. encodeURIComponent también los codifica: espera un único valor de parámetro. La página expone ambos modos; usa codificación de componente para parámetros de query y codificación URI para URLs completas.

¿Por qué el espacio a veces se vuelve %20 y otras +?

%20 es el estándar URI. + es la convención heredada para el tipo MIME application/x-www-form-urlencoded usado por los envíos de formularios HTML. Para la mayoría de servidores parecen iguales, pero no son estrictamente equivalentes: en URLs modernas usa %20.

¿Debo codificar caracteres Unicode?

El RFC 3986 solo permite ASCII; los caracteres no ASCII deben codificarse en UTF-8 y luego escaparse con porcentaje (中 → %E4%B8%AD). Los navegadores modernos muestran la forma Unicode en la barra de direcciones pero envían la codificada por la red. La página realiza el paso de codificación UTF-8 automáticamente.

¿Qué caracteres nunca deben codificarse?

Los caracteres no reservados según el RFC 3986: A-Z, a-z, 0-9, -, _, ., ~. Codificarlos está técnicamente permitido pero produce una cadena URL distinta; los servidores pueden tratar 'a' y '%61' como equivalentes o como diferentes según las reglas de canonicalización.

¿Por qué mi URL decodificada tiene caracteres raros?

Probablemente esté doblemente codificada: %2520 decodifica a %20 y luego a espacio, lo que significa que alguien la codificó dos veces. En ese caso, decodifícala dos veces. Algunos servidores doblan la codificación automáticamente; revisa el comportamiento de codificación de tu cliente.

¿La codificación se hace localmente?

Sí. encodeURIComponent y decodeURIComponent corren en tu navegador. Las URLs no se suben.