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

13

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

VOCÊ
fonte
2
Seria muito mais rápido e fácil perguntar quais caracteres especiais não são seguros para usar em um URL (conforme resposta de Andreas Bonini abaixo).
Mark Hatton
2
Perguntar o que é inseguro é tão difícil de responder: qualquer caractere não-ascii precisa ser codificado em porcentagem.
neo
2
@neo: não, não: O
Thomas Bonini

Respostas:

10

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

Outros personagens darão problemas em algum grau. exemplo: se um parâmetro é uma matriz?param=array[content] ou seja, mostrará um URL com os URL dos colchetes 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.

O Desintegrador
fonte
5
bem, em vez de "caracteres seguros", eu diria "caracteres extremamente seguros" - a especificação permite mais, mas concordo com você que é melhor ser conservador aqui.
Jeff Atwood
2
O que há de errado com o período?
BlueWhale
11

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 o RFC .

Thomas Bonini
fonte
3
Obviamente, apenas para maior clareza, esta resposta é o oposto da pergunta. A pergunta pergunta quais caracteres são seguros, não aqueles que não são seguros. Como é difícil responder com robustez à pergunta original, a pergunta provavelmente deve ser editada para fazer o contrário e corresponder a essa resposta.
Mark10
3

As respostas aqui são boas, mas há mais uma exceção que acho que vale a pena mencionar - caracteres não ingleses. Fazendo referência a essa pergunta do SF aqui , caracteres como ñ (como em espanhol) são perfeitamente legítimos, se tiverem sido codificados no seu DNS corretamente.

Você precisa usar o 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 são fáceis para os que não falam inglês também .

Mark Henderson
fonte