he comprobado mediante la solicitud de mi sitio web (Apache) con todos los caracteres disponibles en mi teclado alemán como parámetro URL:
http://example.com/?^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=? `QWERTZUIOPÜ*ASDFGHJKLÖÄ\'>YXCVBNM;:_²³{[]}\|µ@€~
Estos no fueron codificados:
^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-!/()=?`*;:_{}[]\|~
No codificado después de urlencode()
:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_
no codificados después rawurlencode()
:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~
Nota: Antes de PHP 5.3.0 rawurlencode()
codificado ~
debido RFC 1738. Pero esto fue reemplazado por RFC 3986 por lo que es seguro de usar, ahora. Pero no entiendo por qué, por ejemplo, {}
se codifican a través rawurlencode()
debido a que no se mencionan en el documento RFC 3986.
una prueba adicional que hice fue con respecto de auto-enlace en los textos de correo. Probé Mozilla Thunderbird, aol.com, outlook.com, gmail.com, gmx.de y yahoo.y ellos de URLs totalmente vinculados contienen estos caracteres:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~+#,%&=*;:@
Por supuesto, el ?
estaba ligado, también, pero sólo si se ha utilizado una vez.
Algunas personas ahora sugerirían usar solo los caracteres rawurlencode()
, pero ¿alguna vez escuchó que alguien tuvo problemas para abrir estos sitios web?
asterisco
http://wayback.archive.org/web/*/http://google.com
Colón
https://en.wikipedia.org/wiki/Wikipedia:About
Plus
https://plus.google.com/+google
En la muestra, de colon, coma y signo de exclamación
https://www.google.com/maps/place/USA/@36.2218457,...
Debido a que estos caracteres deben ser sin codificar utilizable sin problemas. Por supuesto, no debe usar &;
debido a secuencias de codificación como &
. El mismo motivo es válido para %
ya que solía codificar caracteres en general. Y =
, ya que asigna un valor a un nombre de parámetro.
Por último, diría que es aceptable utilizar estos sin codificar:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~!+,*:@
pero si esperas generadas de forma aleatoria URL no se debe utilizar .!
, porque aquellos marcar el final de una oración y algunas aplicaciones de correo no será automática -link el último carácter de la url. Ejemplo:
Visit http://example.com/foo=bar! !
Los caracteres permitidos en un URI se reservan ya sea '* '();:!?. @ Y = + $,/# []' 'sin reservas o A-Za-z0-9_ ~ - '(o un carácter de porcentaje'% 'como parte de un porcentaje de codificación) – Mikl
En MySQL utilizo este' REGEXP '[^] A-Za-z0-9_. ~! *' '();: @ & = + $, /? # [% -] + ''para buscar una cadena URL con caracteres incorrectos. Tal vez sea útil para otra persona también. – Mikl