Codifica o decodifica cadenas de URL.
Los resultados tienen carácter informativo. Contrástalos con otras fuentes.
Una frase polaca de 17 caracteres se convierte en 66 dentro de una URL
La codificación por porcentaje trabaja sobre bytes, no sobre caracteres, y UTF-8 gasta más de un byte en todo lo que queda fuera de ASCII. Cada byte se convierte en tres caracteres, así que el texto acentuado se dispara: zażółć gęślą jaźń son 17 caracteres, 26 bytes y 66 caracteres una vez codificado, un factor de 3,88.
Cómo funciona
- Codifica texto por porcentaje para usarlo con seguridad en URL, y lo descodifica de vuelta.
- Codifica primero a UTF-8, que es de donde procede la expansión de tamaño.
- Distingue codificar una URL entera de codificar un solo componente: tareas distintas con conjuntos seguros distintos.
cada byte no seguro → % seguido de dos dígitos hexadecimales bytes en UTF-8: ASCII 1 byte → 1 carácter sin codificar ł, ü 2 bytes → 6 caracteres (%C5%82) €, 日 3 bytes → 9 caracteres (%E2%82%AC) emoji 4 bytes → 12 caracteres (%F0%9F%98%80) 71 de los 95 caracteres ASCII imprimibles pasan intactos
Ejemplo resuelto
Los mismos caracteres codificados y, después, el clásico fallo de doble codificación.
- a → a (1 carácter, sin cambios)
- ł → %C5%82 (6 caracteres)
- 😀 → %F0%9F%98%80 (12 caracteres)
- "a b" → "a%20b"
- codificado otra vez → "a%2520b"
La segunda codificación convierte el % de %20 en %25 y produce %2520. Descodificar una vez devuelve a%20b, no a b: la cadena parece descodificada y sigue siendo incorrecta, y por eso los fallos de doble codificación sobreviven tanto antes de que alguien los note.
Cómo leer el resultado
- El espacio es %20 en una ruta y + en datos de consulta codificados como formulario, y ambos no son intercambiables. Descodificar un + como un más literal donde se quería un espacio, o al revés, es el segundo fallo de codificación más común tras la doble codificación.
- Codifica componentes, no URL enteras. Pasar una URL completa por la codificación de componente destruye el :// y los separadores; pasar un componente por la codificación de URL completa deja & y = intactos, lo que permite que la entrada del usuario inyecte parámetros adicionales.
- La expansión trae límites prácticos consigo. Servidores y proxies suelen cortar las URL cerca de los 2.000 caracteres, así que una cadena de consulta con texto acentuado choca con ese techo mucho antes de lo que sugiere el recuento de caracteres.
- Codificar no es escapar para otros contextos. Una cadena codificada por porcentaje es segura en una URL y no dice nada sobre su seguridad en HTML, SQL o un intérprete de comandos: cada destino necesita su propia codificación, aplicada en el punto de uso.
Preguntas frecuentes
- ¿Por qué mi texto se convirtió en %2520?
- Se codificó dos veces. La primera pasada convirtió un espacio en %20; la segunda vio el % como un carácter corriente y lo codificó como %25, dejando %2520. Descodifica dos veces para recuperar el original y luego arregla la capa que codifica de más.
- ¿Un espacio debe ser %20 o +?
- %20 en todas partes salvo en cadenas de consulta codificadas como formulario, donde + es la convención histórica y se sigue produciendo mucho. En ese contexto ambos se descodifican como espacio, pero solo %20 es correcto en un segmento de ruta.