L'ho testato richiedendo il mio sito Web (apache) con tutti i caratteri disponibili sulla mia tastiera tedesca come parametro URL:
http://example.com/?^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=? `QWERTZUIOPÜ*ASDFGHJKLÖÄ\'>YXCVBNM;:_²³{[]}\|µ@€~
Questi non sono stati codificati:
^0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-!/()=?`*;:_{}[]\|~
Non codificato dopo urlencode():
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_
Non codificato dopo rawurlencode():
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~
Nota: prima di PHP 5.3.0 rawurlencode()codificato a ~causa di RFC 1738 . Ma questo è stato sostituito da RFC 3986 quindi è sicuro da usare, ora. Ma non capisco perché ad esempio {}vengano codificatirawurlencode() perché non menzionati in RFC 3986.
Un ulteriore test che ho fatto riguardava il collegamento automatico nei messaggi di posta. Ho testato Mozilla Thunderbird, aol.com, outlook.com, gmail.com, gmx.de e yahoo.de e hanno completamente collegato URL contenenti questi caratteri:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~+#,%&=*;:@
Naturalmente il ? link era collegato, ma solo se usato una volta.
Alcune persone ora suggeriscono di usare solo il file rawurlencode() caratteri, ma hai mai sentito che qualcuno ha avuto problemi ad aprire questi siti Web?
Asterisco
http://wayback.archive.org/web/*/http://google.com
Due punti
https://en.wikipedia.org/wiki/Wikipedia:About
Inoltre
https://plus.google.com/+google
A segno, due punti, virgola e punto esclamativo
https: //www.google.com/maps/place/USA/@36.2218457, ...
Per questo motivo questi caratteri devono essere utilizzabili senza codifica senza problemi. Naturalmente non dovresti usare a &;causa della codifica di sequenze come &. Lo stesso motivo è valido in %quanto utilizzato per codificare i caratteri in generale. E= poiché assegna un valore al nome di un parametro.
Infine, direi che va bene usare questi non codificati:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~!+,*:@
Ma se ti aspetti che gli URL generati casualmente non dovresti usare .!, perché quelli segnano la fine di una frase e alcune app di posta non collegheranno automaticamente l'ultimo carattere dell'URL. Esempio:
Visit http://example.com/foo=bar! !
!*'();:@&=+$,/?#[]o non riservatiA-Za-z0-9_.~-(o un carattere percentuale%come parte di una codifica percentuale)