Codificación de URL

Algunos caracteres no pueden formar parte de una URL (por ejemplo, el espacio), y otros tienen un significado especial en la URL. En los formularios HTML, el carácter = se usa para separar un nombre de un valor. La sintaxis genérica de URI usa la codificación de URL para solucionar este problema, mientras que los formularios HTML realizan algunas sustituciones adicionales en lugar de aplicar la codificación porciento para todos esos caracteres.

Por ejemplo, los espacios de una string se codifican con %20 o se reemplazan con el signo más (+). Si usas un carácter de barra vertical (|) como separador, asegúrate de codificarlo como %7C. Una coma de una string debe codificarse como %2C.

Se recomienda usar las bibliotecas de compilación de URL normales de tu plataforma para codificar las URL automáticamente y, así, garantizar que las URL tengan los caracteres de escape correctos para tu plataforma.

Cómo crear una URL válida

Quizás pienses que una URL "válida" es evidente, pero no siempre es así. Una URL que se ingresa en una barra de direcciones de un navegador, por ejemplo, puede contener caracteres especiales (como "上海+中國"); el navegador debe traducir internamente esos caracteres a una codificación diferente antes de la transmisión. Con el mismo token, cualquier código que genere o acepte entradas en UTF-8 podría procesar las URL con caracteres UTF-8 como "válidas", pero también necesitaría traducir esos caracteres antes de enviarlos a un servidor web. Este proceso se llama codificación de URL o codificación porciento.

Caracteres especiales

Necesitamos traducir los caracteres especiales porque todas las URL deben cumplir con la sintaxis que se indica en la especificación del identificador uniforme de recursos (URI). Esto significa que las URL solo deben contener un subconjunto especial de caracteres ASCII: los símbolos alfanuméricos conocidos y algunos caracteres reservados para usar como caracteres de control dentro de las URL. Dichos caracteres se resumen en la siguiente tabla:

Resumen de caracteres válidos para URL
ConjuntoCaracteresUso de URL
Alfanuméricos a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 Strings de texto, uso de esquemas (http), puerto (8080), etcétera
No reservados - _ . ~ Strings de texto
Reservados ! * ' ( ) ; : @ & = + $ , / ? % # [ ] Caracteres de control o strings de texto

Cuando compiles una URL válida, debes asegurarte de que solo contenga los caracteres que se muestran en la tabla Resumen de caracteres válidos para URL. Adaptar una URL para usar este conjunto de caracteres generalmente provoca dos problemas, de omisión y sustitución:

  • Es posible que quieras usar caracteres que no se encuentren dentro del conjunto anterior. Por ejemplo, los caracteres en otros idiomas, como 上海+中國, se deben codificar mediante los caracteres anteriores. Por convención popular, los espacios (que no se permiten en las URL) suelen representarse con el carácter de signo más '+' también.
  • Hay caracteres dentro del conjunto anterior que son reservados, pero se deben usar literalmente. Por ejemplo, ? se usa en las URL para indicar el comienzo de la cadena de consulta; si deseas usar la string "? and the Mysterions", debes codificar el carácter '?'.

Todos los caracteres que utilicen la codificación de URL se codifican con un carácter '%' y un valor hexadecimal de dos caracteres correspondiente a su carácter UTF-8. Por ejemplo, 上海+中國 en UTF-8 utilizaría la codificación de URL %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B. A su vez, la string ? and the Mysterians utilizaría las codificaciones de URL %3F+and+the+Mysterians o %3F%20and%20the%20Mysterians.

Caracteres comunes que necesitan codificación

A continuación, se indican algunos de los caracteres comunes que se deben codificar:

Carácter no seguro Valor codificado
Espacio %20
" %22
< %3C
> %3E
# %23
% %25
| %7C

A veces, convertir una URL que recibes a través de la entrada de un usuario puede ser engañoso. Por ejemplo, un usuario puede ingresar una dirección como "5th&Main St.". Por lo general, deberías crear tu URL a partir de sus partes y tratar las entradas de los usuarios como caracteres literales.

Además, las URL tienen un límite de 8,192 caracteres para todos los servicios web de Google Maps Platform y las API web estáticas. Para la mayoría de los servicios, este límite de caracteres se alcanza con poca frecuencia. No obstante, ten en cuenta que algunos servicios tienen varios parámetros que podrían generar URL extensas.