Saltar al contenido

Codificar URL

Aplica codificación porcentual a un texto para que sobreviva dentro de una URL. Existen tres codificaciones distintas para tres trabajos distintos, y elegir la equivocada es como los valores se rompen sin avisar, así que la página te dice cuál necesitas.

  • Nunca se guarda
  • Sin filas ni esperas
  • Sin registro, sin marca de agua
Codificado

Aquí aparece: Codificado.

Cómo funciona

1

Pega tu texto

Cualquier texto, en cualquier idioma. Se codifica como UTF-8, que es lo que espera cualquier servidor moderno.

2

Elige el trabajo

Un valor que va dentro de una query string, una URL completa ya armada o el envío de un formulario. La diferencia importa, y cada uno se explica.

3

Copia el resultado

Codifica línea por línea si tienes una lista entera para procesar de una vez.

Tres respuestas correctas, y por qué un solo botón se equivoca

La codificación porcentual reemplaza un carácter por un % y su valor de byte en hexadecimal. La especificación divide los caracteres en tres grupos, y todo lo confuso de este tema viene de ahí. Los caracteres no reservados (letras, dígitos, guion, punto, guion bajo y virgulilla) nunca necesitan codificarse. Los caracteres reservados (las barras, signos de interrogación, signos &, signos igual y dos puntos que dan estructura a una URL) deben codificarse *cuando son datos* y no deben codificarse *cuando son estructura*. Todo lo demás se codifica siempre.

Por eso no hay una única respuesta correcta. Codificar una URL completa tiene que dejar intactas las barras y el signo de interrogación, o la dirección deja de ser una dirección. Codificar un valor para ponerlo en un parámetro de consulta debe escapar los signos & y los signos igual, o un valor que contenga uno se parte en dos parámetros. Codificar un segmento de ruta debe escapar las barras, o un nombre de archivo con una barra se convierte en dos directorios. Un solo botón de “Codificar” elige uno de estos casos y se equivoca en los otros dos tercios, normalmente sin avisar y de una forma que solo aparece con entradas poco comunes.

El espacio es el carácter con más historia a cuestas. En una URL es %20. En un formulario HTML enviado es un +, que es una codificación distinta y más antigua que sobrevive porque los formularios funcionan así desde 1994. Las dos son correctas en su propio contexto y ninguna lo es en el otro, y por eso un signo más en una query string es ambiguo de una forma que ningún cuidado al codificar puede resolver.

El texto que no es ASCII se codifica primero como UTF-8 y luego byte a byte, así que una sola letra acentuada se convierte en dos secuencias porcentuales y un emoji en cuatro. La doble codificación es el error clásico: codificar algo que ya estaba codificado convierte cada % en %25, así que %20 pasa a ser %2520 y el otro extremo recibe un signo de porcentaje literal. Si una URL está llena de %25, pasó por un codificador de más.

Si buscas otra cosa

En código, usa la función propia del lenguaje y elígela con el mismo cuidado con que esta página te hace elegir. JavaScript tiene encodeURI para direcciones completas y encodeURIComponent para valores; Python tiene urllib.parse.quote con un argumento safe que por defecto deja intactas las barras; PHP distingue rawurlencode de urlencode, que difieren justamente en la cuestión de espacio frente a signo más de la que hablamos arriba. Mejor aún: construye las URL con un tipo URL en lugar de juntar cadenas, y la pregunta desaparece.

En la línea de comandos, jq -rR @uri codifica de forma segura y maneja una lista, y curl --data-urlencode arma un parámetro correctamente codificado sin que tengas que pensar en cuál de los tres casos estás, que es el único lugar donde esto es realmente fácil.

Preguntas frecuentes

¿Cuál de los tres debería usar?

“Un valor”, casi siempre. Úsalo cuando codifiques UN valor que va a ir dentro de una query string o de un segmento de ruta: un término de búsqueda, una dirección de correo, un destino de redirección. Es el único de los tres que escapa &, =, ? y /, que es justamente lo que impide que tu valor se salga de su parámetro y se convierta en dos parámetros. Usa “Una URL completa” solo cuando ya tengas una URL entera y solo quieras limpiar sus caracteres no seguros; deja intactos a propósito los caracteres estructurales para que la URL siga siendo una URL. Usa “Datos de formulario” cuando estés armando un cuerpo application/x-www-form-urlencoded, donde un espacio es + en lugar de %20.

¿Por qué mi “&” rompió la URL?

Porque no estaba codificado, y & es lo que usa una query string para separar un parámetro del siguiente. Un valor “Smith & Sons” agregado tal cual a ?company= llega al servidor como company=Smith más un segundo parámetro vacío llamado “Sons”. Es el error de URL más común de todos, y la codificación de valor es la solución: convierte & en %26 para que el valor siga siendo un solo valor.

¿Por qué mi “+” se convirtió en un espacio?

Porque en una query string, + significa espacio, una regla heredada de los formularios HTML que nadie ha logrado eliminar. Así que un signo más literal en tus datos, en un número de teléfono o en una cadena Base64, el servidor que lo recibe lo lee como un espacio. La codificación de valor lo escapa como %2B, que llega intacto.

¿Funciona con otros idiomas y con emojis?

Sí. El texto se convierte primero a UTF-8 y luego se codifica byte a byte, que es lo que exige la RFC 3986 y lo que espera cualquier servidor moderno. El japonés, el árabe, el latín con acentos y los emojis van y vuelven exactamente iguales.

¿Por qué aquí se codifican ! ' ( ) * cuando otras herramientas los dejan?

Porque la función encodeURIComponent integrada en el navegador deja esos cinco sin tocar, y la RFC 3986 los incluye como reservados. Algunos servidores y frameworks los tratan como estructura, así que un valor que los contenga puede interpretarse mal. Codificarlos no tiene ningún inconveniente (se decodifican idénticos en todas partes) y elimina toda una clase de errores raros y difíciles de diagnosticar. Es lo que hacen las implementaciones cuidadosas.

¿Se guarda mi texto en algún lugar?

No. No se guarda nada y no se hace ninguna solicitud. Puedes desconectarte de internet después de que cargue la página y sigue funcionando.

Conviene saber: Hay tres respuestas correctas distintas y la página te hace elegir, porque el típico botón único de “Codificar” se equivoca dos de cada tres veces. Codificar una URL completa, un parámetro de consulta y un segmento de ruta escapa caracteres distintos; usar el equivocado rompe sin avisar las barras, los signos más o los signos &.

Agrega esta herramienta a tu sitio web

Gratis para cualquier blog, página de clase o artículo de ayuda. Pega un fragmento de código y tus visitantes podrán usarla directamente en tu página.