Partes de la URL

Protocolo${ partes.protocolo }
Dominio${ partes.dominio }
Puerto${ partes.puerto }
Ruta${ partes.ruta }
${ i === 0 ? 'Parámetros' : '' }${ clave } = ${ valor }
Fragmento${ partes.fragmento }

¿Por qué hay que codificar una URL?

Una URL solo puede llevar unos pocos caracteres: letras sin tilde, números y algunos signos. Otros, como ?, &, = o #, tienen un significado especial: separan la ruta, los parámetros y sus valores. Y los espacios, las tildes o la ñ, directamente, no están permitidos.

Para usarlos hay que codificarlos (en inglés, percent-encoding o URL encoding): cada carácter se convierte en sus bytes en UTF-8 y cada byte se escribe como % seguido de su valor en hexadecimal. Por ejemplo:

  • un espacio es %20,
  • la ñ es %C3%B1, porque en UTF-8 ocupa dos bytes,
  • la é es %C3%A9,
  • y el & dentro de un valor es %26, para que no se confunda con el separador de parámetros.

¿Parámetro o URL completa?

Si vas a codificar el valor de un parámetro, por ejemplo lo que alguien escribe en un buscador, hay que codificarlo todo, incluidos /, ? y &: es lo que hace encodeURIComponent en JavaScript o rawurlencode en PHP.

Si vas a codificar una URL entera, esos signos hay que dejarlos como están, porque son los que dan forma a la URL: solo se codifican los espacios, las tildes y el resto de caracteres no permitidos. Es lo que hace encodeURI.

¿%20 o +?

Los dos significan un espacio, pero en sitios distintos. %20 vale en cualquier parte de la URL. El + solo significa espacio en los parámetros enviados por un formulario (application/x-www-form-urlencoded), que es como lo codifica, por ejemplo, urlencode en PHP. En la ruta de una URL, un + es un signo más.

Copiado al portapapeles.