Lo probé solicitando mi sitio web (apache) con todos los caracteres disponibles en mi teclado alemán como parámetro de URL:
http://example.com/?^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=? `QWERTZUIOPÜ*ASDFGHJKLÖÄ\'>YXCVBNM;:_²³{[]}\|µ@€~
Estos no fueron codificados:
^0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-!/()=?`*;:_{}[]\|~
No codificado después de urlencode()
:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_
No codificado después de rawurlencode()
:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~
Nota: Antes de PHP 5.3.0 rawurlencode()
codificado ~
debido a RFC 1738 . Pero esto fue reemplazado por RFC 3986, por lo que ahora es seguro de usar. Pero no entiendo por qué, por ejemplo, {}
están codificados rawurlencode()
porque no se mencionan en RFC 3986.
Una prueba adicional que hice fue con respecto a la vinculación automática en los mensajes de correo. Probé Mozilla Thunderbird, aol.com, outlook.com, gmail.com, gmx.de y yahoo.de y vincularon completamente las URL que contienen estos caracteres:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~+#,%&=*;:@
Por supuesto ?
, también estaba vinculado, pero solo si se usó una vez.
Algunas personas ahora sugerirían usar solo los rawurlencode()
caracteres, pero ¿alguna vez escuchó que alguien tuvo problemas para abrir estos sitios web?
Asterisco
http://wayback.archive.org/web/*/http://google.com
Colon
https://en.wikipedia.org/wiki/Wikipedia:About
Además
https://plus.google.com/+google
Al firmar, Colón, coma y signo de exclamación
https: //www.google.com/maps/place/USA/@36.2218457, ...
Debido a eso, estos caracteres deberían poder utilizarse sin codificar sin problemas. Por supuesto, no debe usarlo &;
debido a secuencias de codificación como &
. La misma razón es válida %
ya que solía codificar caracteres en general. Y a =
medida que asigna un valor a un nombre de parámetro.
Finalmente, diría que está bien usar estos sin codificar:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~!+,*:@
Pero si espera URL generadas aleatoriamente que no debe usar .!
, porque marcan el final de una oración y algunas aplicaciones de correo no vincularán automáticamente el último carácter de la URL. Ejemplo:
Visit http://example.com/foo=bar! !
!*'();:@&=+$,/?#[]
o no reservadosA-Za-z0-9_.~-
(o un carácter de porcentaje%
como parte de una codificación de porcentaje)