ti-enxame.com

Quais caracteres especiais são seguros para usar no URL?

Quais caracteres especiais são seguros para usar no URL?

13
YOU

Os caracteres seguros são a-z, A-Z, 0-9 e _ - (sublinhado e menos), que, além dos caracteres reservados, são usados ​​para os parâmetros.

Outros personagens darão problemas em algum grau. exemplo: se um parâmetro for uma matriz ?param=array[content], isto mostrará um URL com os colchetes url codificados, que parecem feios e impossíveis de serem ditados.

Mas o problema não é apenas feio, digamos que você tenha um jpg com um caractere ao lado dos mais seguros, muitas vezes o navegador não poderá baixá-lo obtendo um 404. Esse é um problema de navegadores mais antigos e de alguns navegadores móveis.

Como testar isso?

  • coloque um monte de images/js/css com os caracteres que você deseja testar nos nomes em uma página pública com muitos visitantes
  • Faça com que a página 404 envie um e-mail sempre que for atingida

Eu tenho uma caixa de entrada com 14000 e-mails comprovando meu argumento.

10
The Disintegrator

Os seguintes caracteres têm um significado especial no componente do caminho da sua URL (o componente do caminho é tudo antes do '?'):

  ";" | "/" | "?"

Além desses, os seguintes caracteres têm um significado especial na parte da consulta do seu URL (tudo depois de '?'). Portanto, se eles estão atrás do '?' você precisa escapar deles:

  ":" | "@" | "&" | "=" | "+" | "$" | ","

Para uma explicação mais aprofundada, consulte RFC .

11
Thomas Bonini

As respostas aqui são boas, mas há mais uma exceção que acho que vale a pena mencionar - caracteres não em inglês. Referenciando esta pergunta sobre SF aqui , caracteres como ñ (como em Español) são perfeitamente legítimos, SE eles foram codificados no seu DNS corretamente.

Você precisa usar Punycode no seu DNS para que eles sejam resolvidos em navegadores modernos (a entrada para español é xn--espaol-zwa), mas agora eles são perfeitamente seguros para uso em nomes de domínio, pois ' É fácil digitar também quem não fala inglês.

3
Mark Henderson