Cómo codificar una cadena para URL
- Escribe o pega el texto en Texto o URL. La salida se actualiza mientras escribes.
- Elige el modo en Codificar:
- Componente (encodeURIComponent) para un valor de consulta, un campo de formulario o un segmento de ruta.
- URL completa (encodeURI) para una URL completa que contiene espacios o caracteres no ASCII.
- Datos de formulario (espacio como +) para cuerpos
application/x-www-form-urlencodedy query strings construidas como lo hacen los formularios HTML. - Todos los caracteres para codificar por porcentajes todos los bytes, letras incluidas, y así probar decodificadores.
- Deja Juego de caracteres en UTF-8 salvo que el sistema receptor espere una codificación antigua.
- Marca Cada línea por separado para codificar una lista de valores de una vez y después pulsa Copiar salida. Intercambiar envía el resultado al decodificador para comprobar el viaje de ida y vuelta.
Una URL completa en la entrada también se divide en esquema, host, ruta, cada parámetro de consulta y el fragmento, en una tabla bajo los paneles.
encodeURIComponent frente a encodeURI frente a codificación de formulario
La misma entrada, a b&c=d/é?#+, en los tres estilos habituales:
| Modo | Salida | Para qué sirve |
|---|---|---|
Componente (encodeURIComponent) | a%20b%26c%3Dd%2F%C3%A9%3F%23%2B | un único valor dentro de una URL |
URL completa (encodeURI) | a%20b&c=d/%C3%A9?#+ | una URL entera que ya está bien estructurada |
Datos de formulario (URLSearchParams) | a+b%26c%3Dd%2F%C3%A9%3F%23%2B | envíos de formularios HTML, muchas bibliotecas de query strings |
Componente solo deja sin escapar A–Z a–z 0–9 - _ . ! ~ * ' ( ). URL completa conserva además ; / ? : @ & = + $ , #, los caracteres que dan estructura a una URL, así que no puede proteger un valor que los contenga. Datos de formulario solo conserva letras, dígitos y - _ . *, y escribe los espacios como +.
El error clásico es construir una URL con la codificación URL completa: ?q=C++ & Go conserva el + y el &, y el servidor recibe q=C más un parámetro suelto. Codifica el valor con Componente: ?q=C%2B%2B%20%26%20Go.
Espacios, signos más y otros alborotadores
| Carácter | Codificado | Por qué importa |
|---|---|---|
| espacio | %20 o + | + solo significa espacio en query strings y cuerpos de formulario |
+ | %2B | sin codificar, muchos servidores lo convierten en espacio: +49 30 1234567 pasa a ser 49 30 1234567 |
& | %26 | inicia un nuevo parámetro de consulta |
= | %3D | separa nombre y valor; el Base64 estándar termina con él |
/ | %2F | separa segmentos de ruta; algunos servidores rechazan %2F en las rutas |
# | %23 | inicia el fragmento, que nunca se envía al servidor |
% | %25 | también hay que codificarlo, o el decodificador lee un escape roto |
€ | %E2%82%AC | tres bytes UTF-8, tres escapes |
El Base64 en una URL es un caso habitual del problema de +, / y =. Codifícalo por porcentajes como componente o pasa a Base64URL, que evita esos caracteres.
Juegos de caracteres distintos de UTF-8
La codificación por porcentajes trabaja con bytes, así que el juego de caracteres decide el resultado. é es %C3%A9 en UTF-8 y %E9 en Windows-1252 o ISO-8859-1. Los navegadores y las API modernas usan UTF-8, pero las aplicaciones PHP antiguas, algunas pasarelas de pago y sistemas de intranet heredados todavía esperan Latin-1 o Windows-1252, y los sitios japoneses a veces Shift_JIS. Elige el que corresponda en Juego de caracteres. Un carácter que no existe en el juego elegido no se puede representar, así que revisa la salida por si aparece alguno.
Codificar URL en código
encodeURIComponent("a b&c") // "a%20b%26c"
new URLSearchParams({ q: "C++ & Go" }).toString() // "q=C%2B%2B+%26+Go"
from urllib.parse import quote, quote_plus, urlencode
quote("/files/a b.txt") # '/files/a%20b.txt' (keeps / by default)
quote("/files/a b.txt", safe="") # '%2Ffiles%2Fa%20b.txt'
quote_plus("a b&c") # 'a+b%26c'
urlencode({"q": "C++ & Go"}) # 'q=C%2B%2B+%26+Go'
quote de Python conserva / salvo que le pases safe="", una sorpresa frecuente al codificar un valor. En otros lenguajes: rawurlencode de PHP da %20 y urlencode da +; URLEncoder.encode de Java es codificación de formulario con +; Go tiene url.PathEscape (%20) y url.QueryEscape (+). encodeURIComponent no toca ! ' ( ) *; para una salida estricta según RFC 3986, sustitúyelos después:
const strict = s => encodeURIComponent(s).replace(/[!'()*]/g,
c => "%" + c.charCodeAt(0).toString(16).toUpperCase());
Hay más sobre la parte de JavaScript en la página de Base64 en JavaScript. Para deshacer todo esto, usa el decodificador de URL.
Preguntas frecuentes
¿Qué es la codificación URL?
La codificación URL, o codificación por porcentajes, sustituye los caracteres que no están permitidos o tienen un significado especial en una URL por % y dos dígitos hex de cada byte. Un espacio pasa a ser %20, & pasa a ser %26 y é en UTF-8 pasa a ser %C3%A9.
¿Cómo codifico un espacio en una URL: %20 o +?
%20 funciona en todas partes. + solo significa espacio en las query strings y los cuerpos de formulario que siguen la convención de codificación de formularios; en una ruta es un más literal. Si dudas, usa %20.
¿Debo codificar la URL entera?
No, codifica cada valor antes de insertarlo. Codificar una URL entera con Componente también escapa :, /, ? y &, y la rompe. El modo URL completa conserva esos caracteres estructurales y solo arregla los espacios y el texto no ASCII.
¿Por qué mi cadena codificada contiene %25?
%25 es un signo de porcentaje codificado, lo que significa que la entrada ya estaba codificada y se codificó una segunda vez: a%20b se convierte en a%2520b. Codifica el texto original exactamente una vez.
¿Hex en mayúsculas o en minúsculas en la codificación por porcentajes?
RFC 3986 trata %2F y %2f como iguales y recomienda mayúsculas. Marca Hex en minúsculas solo para coincidir con un sistema que las genera en minúsculas, por ejemplo al comparar firmas.