Sempre seguro
Estes são seguros (em teoria / especificação), basicamente em qualquer lugar, exceto no nome de domínio.
Codifique por cento tudo o que não estiver listado e você estará pronto.
A-Z a-z 0-9 - . _ ~ ( ) ' ! * : @ , ;
Às vezes seguro
Somente seguro quando usado em componentes de URL específicos; use com cuidado.
Paths: + & =
Queries: ? /
Fragments: ? / # + & =
Never Safe
De acordo com a especificação do URI (RFC 3986), todos os outros caracteres devem ser codificados em porcentagem. Isso inclui:
<space> <control-characters> <extended-ascii> <unicode>
% < > [ ] { } | \ ^
Se a compatibilidade máxima for uma preocupação, limite o conjunto de caracteres para AZ az 0-9 - _.
(com pontos apenas para extensões de nome de arquivo).
Mantenha o contexto em mente
Mesmo se válido por especificação, um URL ainda pode ser "inseguro", dependendo do contexto. Como um arquivo: /// URL que contém caracteres de nome de arquivo inválidos ou um componente de consulta que contém "?", "=" E "&" quando não usado como delimitador. O tratamento correto desses casos geralmente depende de seus scripts e pode ser contornado, mas é algo a ter em mente.