Siempre seguro
Estos son seguros (en teoría / especificaciones), básicamente en cualquier lugar excepto el nombre de dominio.
Codifique por ciento cualquier cosa que no esté en la lista, y ya está listo.
A-Z a-z 0-9 - . _ ~ ( ) ' ! * : @ , ;
A veces seguro
Solo seguro cuando se usa dentro de componentes URL específicos; usar con cuidado.
Paths: + & =
Queries: ? /
Fragments: ? / # + & =
Nunca seguro
De acuerdo con la especificación URI (RFC 3986), todos los demás caracteres deben estar codificados en porcentaje. Esto incluye:
<space> <control-characters> <extended-ascii> <unicode>
% < > [ ] { } | \ ^
Si le preocupa la compatibilidad máxima, limite el juego de caracteres a AZ az 0-9 - _.
(con puntos solo para extensiones de nombre de archivo).
Mantenga el contexto en mente
Incluso si es válido por especificación, una URL puede ser "insegura", según el contexto. Como un archivo: /// URL que contiene caracteres de nombre de archivo no válidos, o un componente de consulta que contiene "?", "=" Y "&" cuando no se utilizan como delimitadores. El manejo correcto de estos casos generalmente depende de sus scripts y se puede solucionar, pero es algo a tener en cuenta.