Cómo codificar una URL: %20 o + y errores comunes

Por • 1 Noviembre, 2026 • Herramientas para desarrolladores • 10 minutos de lectura

Codifica cualquier texto para una URL en segundos con una herramienta gratis. Cuándo usar %20 o +, tildes y ñ, y cómo evitar la doble codificación.

Para codificar una URL (URL encode) hay que sustituir cada carácter que no sea una letra sin tilde, un número o uno de - . _ ~ por un % seguido del valor hexadecimal de cada uno de sus bytes en UTF-8. Un espacio pasa a ser %20 (o + dentro de la query), & pasa a %26 y la ñ se convierte en %C3%B1. Lo más rápido es pegar el texto en nuestro codificador de URL gratis y copiar el resultado: es gratis, no pide cuenta y funciona en cualquier navegador. Lo difícil es saber qué codificar y qué variante espera el sitio donde vas a pegarlo, y de eso trata casi toda esta guía.

Todos los resultados que verás son reales: pasamos las entradas por las herramientas de My Botsy en producción el 1 de noviembre de 2026 y las comparamos con JavaScript (Node.js 24), Python 3.13 y PHP usando las mismas cadenas.

Cómo codificar una URL paso a paso

  1. Aísla el valor. Codifica solo el dato que va dentro de la URL: un término de búsqueda, un nombre de archivo o una dirección de redirección. Nunca la dirección completa (lo explicamos más abajo).
  2. Pégalo en el codificador. Abre el codificador de URL, pega el valor y pulsa Enviar.
  3. Copia el resultado. Usa el botón de copiar. Los espacios salen como +, que es lo correcto en una query string.
  4. Cambia a %20 si va en la ruta. Si el valor forma parte de la ruta (antes del ?), reemplaza cada + por %20. Es seguro, porque un signo más real de tu texto ya viene codificado como %2B.
  5. Compruébalo. Pega el enlace final en el analizador de URL: decodifica cada parámetro y te muestra exactamente lo que recibirá el servidor.

Pruébalo ahora: pega cualquier texto con espacios, tildes o un & en el codificador de URL gratis y tendrás una versión segura para enlaces en un segundo.

Qué caracteres hay que codificar

El RFC 3986, el estándar que define las URL, divide los caracteres en tres grupos:

  • No reservados, nunca se codifican: A–Z a–z 0–9 - . _ ~. Ojo: la ñ y las vocales con tilde no están en esta lista.
  • Reservados, tienen una función en la URL: : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Hay que codificarlos cuando son parte de tus datos y no de la estructura. Un & sin codificar en una búsqueda abre un parámetro nuevo y corta tu valor por la mitad.
  • Todo lo demás: espacios, comillas, < >, %, letras con tilde, emojis y cualquier alfabeto no latino. Siempre se codifican, byte a byte, a partir de UTF-8. Por eso jamón y queso queda como jam%C3%B3n+y+queso y año 2026 como a%C3%B1o+2026.

Prueba real: una cadena llena de trampas

Usamos a propósito una entrada difícil, con casi todos los problemas posibles:

Café & Bar #1 / 50% off? a+b=c ~ü 東京 Tom's "best" <b>

El codificador de URL devolvió:

Caf%C3%A9+%26+Bar+%231+%2F+50%25+off%3F+a%2Bb%3Dc+%7E%C3%BC+%E6%9D%B1%E4%BA%AC+Tom%27s+%22best%22+%3Cb%3E
EntradaSalidaPor qué importa
espacio+Formato de formulario, válido en la query
&%26Si no, empezaría un parámetro nuevo
#%23Si no, todo lo que sigue sería un fragmento que el servidor nunca ve
%%25Si no, 50% o se leería como un escape roto
+%2BSi no, el servidor lo lee como un espacio
é, ü%C3%A9, %C3%BCDos bytes UTF-8 cada uno
~%7EInnecesario pero inofensivo: los servidores aceptan ambas formas
' " < >%27 %22 %3C %3ESe conservan como datos, no se borran

Ese resultado es idéntico, byte a byte, al que genera URLSearchParams en el navegador para el mismo texto, y al de la función urlencode() de PHP, que es la que usa la herramienta. Un valor codificado aquí se comporta igual que uno enviado por un formulario web.

¿%20 o +? Cuál usar para los espacios

Los dos significan «espacio», pero en sitios distintos. %20 es la codificación porcentual general del RFC 3986 y vale en cualquier parte de la URL. + viene del formato de formularios HTML (application/x-www-form-urlencoded) y solo equivale a un espacio dentro de la query string. En la ruta, un + es un signo más literal: /archivos/mi+informe.pdf pide un archivo con un más en el nombre.

  • Valores de la query (?q=jam%C3%B3n+y+queso): + o %20, los dos funcionan.
  • Segmentos de ruta (/docs/mi%20informe): solo %20.
  • Enlaces mailto:: %20. El estándar de mailto (RFC 6068) pide escribir los espacios como %20, porque un + no se distingue de un más real, como en ana+boletin@example.org. Por eso nuestro generador de enlaces mailto usa %20; lo explicamos en la guía de enlaces mailto.

Qué función usar en tu código

Pasamos la misma cadena de prueba por las funciones más comunes. No coinciden en cuatro cosas: el espacio, /, ~ y '.

FunciónEspacio/~'¿Deja & # ? sin codificar?
JS encodeURIComponent%20%2F~'No
JS encodeURI%20/~'Sí
JS URLSearchParams+%2F%7E%27No
Python quote()%20/~%27No
Python quote_plus()+%2F~%27No
PHP rawurlencode()%20%2F~%27No
PHP urlencode() / nuestra herramienta+%2F%7E%27No

Dos de ellas suelen dar sustos. encodeURI está pensada para una URL completa, así que no toca &, #, ?, = ni +; aplicada a un valor, Café & Bar #1 queda como Caf%C3%A9%20&%20Bar%20#1 y el enlace se rompe en el & y en el #. El quote() de Python conserva la / por defecto, así que una redirección como /carrito?id=7 mantiene la barra si no pasas safe=''. Para un valor suelto, usa encodeURIComponent, quote(valor, safe='') o rawurlencode.

Ejemplo práctico: una URL dentro de otra URL

Una página de login tiene que devolver al usuario a /cart?id=7. Si escribes /login?next=/cart?id=7, el segundo ? y cualquier & posterior confunden al servidor. Codifica primero la URL interior:

/login?next=%2Fcart%3Fid%3D7

Para comprobar un enlace terminado, pegamos https://shop.example/search?q=caf%C3%A9+%26+bar&next=%2Fcart%3Fid%3D7 en el analizador de URL. Mostró la query en bruto y luego los parámetros decodificados, tal como los recibe el servidor:

{ "q": "café & bar", "next": "/cart?id=7" }

Dos valores limpios y ningún parámetro de más. Los enlaces de campaña funcionan igual: cada valor UTM es un parámetro, así que codifícalo o, mejor aún, limítate a minúsculas y guiones bajos, como recomienda nuestra guía de parámetros UTM.

Errores habituales al codificar URLs

Codificar la URL entera

Codificar https://mybotsy.com/?q=zapatos rojos da https%3A%2F%2Fmybotsy.com%2F%3Fq%3Dzapatos+rojos, que ya no funciona como enlace. Solo es correcto cuando la URL completa es a su vez el valor de un parámetro, como en la redirección de arriba.

Codificar dos veces

Si vuelves a codificar un texto ya codificado, se codifican los signos de porcentaje. Probamos a%20b y obtuvimos a%2520b. Si ves %25 seguido de dos dígitos hexadecimales en un enlace, está doblemente codificado. Decodificar %25252F requiere tres pasadas para llegar a / (%252F, luego %2F, luego /).

Perder un signo más al decodificar

Los decodificadores de tipo formulario, incluido nuestro decodificador de URL, convierten + en espacio. Decodificamos q=mac+cheese&phone=%2B54+11+5555&path=%2Fdocs%2520v2 y salió q=mac cheese&phone=+54 11 5555&path=/docs%20v2. El prefijo telefónico solo sobrevivió porque su más estaba escrito como %2B; un +34 sin codificar se habría convertido en un espacio. Lo mismo estropea los valores Base64 en URLs: mira cómo decodificar Base64 para conocer el alfabeto seguro para URLs que lo evita.

Mezclar escapes Latin-1 antiguos con UTF-8

Algunos sistemas viejos codifican é como %E9 (un byte Latin-1) en lugar de %C3%A9. Al decodificarlo como UTF-8, caf%E9 aparece como caf�. Si ves el carácter de reemplazo, el origen usaba una codificación antigua; pasa a menudo con la ñ en webs y formularios antiguos.

Fiarse del recorte automático

Nuestro codificador recorta los espacios del principio y del final: " hello world" + salto de línea + "line 2 " salió como hello+world%0D%0Aline+2. Suele ser lo que quieres, pero si un espacio inicial importa, añade %20 a mano. Un salto de línea escrito en el navegador se convierte en %0D%0A.

Un % suelto en JavaScript

decodeURIComponent("50%") lanza URIError: URI malformed. Nuestro decodificador deja el % suelto tal cual (50% off sigue siendo 50% off): práctico con datos sucios, pero tampoco te avisa.

Herramientas gratis relacionadas

Todas son gratis y no piden cuenta. Los visitantes tienen 5 usos al día, y una cuenta gratuita de My Botsy (100 % gratis, sin spam) elimina ese límite.

Preguntas frecuentes

¿Qué es codificar una URL?

Codificar una URL, o codificación porcentual, sustituye los caracteres que no están permitidos o que tienen un significado especial por un signo % y el valor hexadecimal de cada byte. Un espacio pasa a %20, & a %26 y la ñ a %C3%B1, sus dos bytes UTF-8.

¿Un espacio en una URL es %20 o +?

Dentro de la query string valen los dos, porque + es la forma de formulario de escribir un espacio. En la ruta o en un enlace mailto usa %20, porque ahí + es un signo más literal. Nuestro codificador devuelve +, así que cámbialo por %20 si va en la ruta.

¿Qué caracteres no hace falta codificar?

Solo las letras de la A a la Z sin tilde, los dígitos del 0 al 9 y los símbolos - . _ ~. Los reservados como & ? # = / + : se codifican cuando forman parte del dato, y todo lo demás (espacios, comillas, tildes, ñ, emojis) se codifica siempre.

¿Qué diferencia hay entre encodeURI y encodeURIComponent?

encodeURI es para una URL completa y no toca caracteres estructurales como & # ? = y /. encodeURIComponent es para un valor suelto y sí los codifica. Usar encodeURI en un término de búsqueda o una redirección rompe el enlace en el primer & o #.

¿Por qué mi enlace muestra %2520?

Se codificó dos veces: la primera pasada convirtió el espacio en %20 y la segunda convirtió el % en %25. Decodifícalo una vez y codifica el texto original una sola vez.

¿El codificador de URL es gratis?

Sí. El codificador de URL de My Botsy es gratis, no pide cuenta y funciona en cualquier navegador. Los visitantes tienen 5 usos al día, y una cuenta gratuita elimina el límite.

¿Tienes un valor que meter en un enlace? Pégalo en el codificador de URL gratis, copia el resultado y revisa el enlace final con el analizador de URL.

Cómo leer un user agent (con ejemplos reales)

2 Noviembre, 2026

Aprende a leer cualquier user agent: qué tokens importan, qué valores congelan los navegadores y cómo verificar bots. Resultados reales del ..

Cómo minificar CSS (y cuánto ahorras de verdad)

31 Octubre, 2026

Minifica CSS en segundos con una herramienta gratis, mide el ahorro real tras gzip y Brotli y evita los errores que rompen tus estilos sin a..

Cómo decodificar Base64: texto, imágenes y JWT (gratis)

30 Octubre, 2026

Decodifica cualquier cadena Base64 en segundos: ejemplos reales con texto, imágenes, JWT y Basic Auth, y por qué salen caracteres raros y có..