Testei-o solicitando meu site (apache) com todos os caracteres disponíveis no meu teclado alemão como parâmetro de URL:
http://example.com/?^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=? `QWERTZUIOPÜ*ASDFGHJKLÖÄ\'>YXCVBNM;:_²³{[]}\|µ@€~
Estes não foram codificados:
^0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-!/()=?`*;:_{}[]\|~
Não codificado após urlencode():
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_
Não codificado após rawurlencode():
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~
Nota: Antes do PHP 5.3.0 rawurlencode()codificado ~por causa da RFC 1738 . Mas isso foi substituído pelo RFC 3986, portanto é seguro usá-lo agora. Mas não entendo por que, por exemplo, {}são codificados rawurlencode()porque não são mencionados na RFC 3986.
Um teste adicional que fiz foi referente à vinculação automática em textos de correio. Testei o Mozilla Thunderbird, aol.com, outlook.com, gmail.com, gmx.de e yahoo.de e eles vincularam completamente os URLs contendo esses caracteres:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~+#,%&=*;:@
É claro que o ?link também estava vinculado, mas apenas se fosse usado uma vez.
Algumas pessoas sugerem agora usar apenas os rawurlencode()caracteres, mas você já ouviu falar que alguém teve problemas para abrir esses sites?
Asterisk
http://wayback.archive.org/web/*/http://google.com
Colon
https://en.wikipedia.org/wiki/Wikipedia:About
Além disso,
https://plus.google.com/+google
Sinal, dois pontos, vírgula e ponto de exclamação
https: //www.google.com/maps/place/USA/@36.2218457, ...
Por esse motivo, esses caracteres devem ser utilizáveis sem codificação sem problemas. Claro que você não deve usar &;por causa de sequências de codificação como &. O mesmo motivo é válido %, pois costumava codificar caracteres em geral. E =como atribui um valor ao nome de um parâmetro.
Finalmente, eu diria que não há problema em usar estes não codificados:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~!+,*:@
Mas se você espera URLs gerados aleatoriamente, não deve usá-lo .!, porque eles marcam o final de uma frase e alguns aplicativos de email não vinculam automaticamente o último caractere do URL. Exemplo:
Visit http://example.com/foo=bar! !
!*'();:@&=+$,/?#[]ou sem reservasA-Za-z0-9_.~-(ou um carácter de percentagem%, como parte de um por cento de codificação)