Je l'ai testé en demandant mon site Web (apache) avec tous les caractères disponibles sur mon clavier allemand comme paramètre d'URL:
http://example.com/?^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=? `QWERTZUIOPÜ*ASDFGHJKLÖÄ\'>YXCVBNM;:_²³{[]}\|µ@€~
Celles-ci n'ont pas été encodées:
^0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-!/()=?`*;:_{}[]\|~
Non encodé après urlencode()
:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_
Non encodé après rawurlencode()
:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~
Remarque: avant PHP 5.3.0 rawurlencode()
encodé à ~
cause de la RFC 1738 . Mais cela a été remplacé par RFC 3986, donc son utilisation est sûre maintenant. Mais je ne comprends pas pourquoi par exemple {}
sont encodés rawurlencode()
car ils ne sont pas mentionnés dans la RFC 3986.
Un test supplémentaire que j'ai fait concernait la liaison automatique dans les textes de courrier. J'ai testé Mozilla Thunderbird, aol.com, outlook.com, gmail.com, gmx.de et yahoo.de et ils ont entièrement lié des URL contenant ces caractères:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~+#,%&=*;:@
Bien sûr, le ?
était également lié, mais seulement s'il était utilisé une fois.
Certaines personnes suggèrent maintenant de n'utiliser que le rawurlencode()
caractères, mais avez-vous déjà entendu dire que quelqu'un avait des problèmes pour ouvrir ces sites Web?
Asterisk
http://wayback.archive.org/web/*/http://google.com
Colon
https://en.wikipedia.org/wiki/Wikipedia:A propos
Plus
https://plus.google.com/+google
Au signe, deux points, virgule et point d'exclamation
https: //www.google.com/maps/place/USA/@36.2218457, ...
Pour cette raison, ces caractères devraient être utilisables non codés sans problème. Bien sûr, vous ne devriez pas utiliser à &;
cause de séquences d'encodage comme &
. La même raison est valable pour %
celle utilisée pour encoder les caractères en général. Et =
comme il attribue une valeur à un nom de paramètre.
Enfin, je dirais que c'est correct d'utiliser ces non encodés:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~!+,*:@
Mais si vous vous attendez à des URL générées de manière aléatoire, vous ne devez pas les utiliser .!
, car elles marquent la fin d'une phrase et certaines applications de messagerie ne lieront pas automatiquement le dernier caractère de l'URL. Exemple:
Visit http://example.com/foo=bar! !
!*'();:@&=+$,/?#[]
ou non réservésA-Za-z0-9_.~-
(ou un caractère de pourcentage%
dans le cadre d'un encodage en pourcentage)