ho provato richiedendo il mio sito web (Apache) con tutti i caratteri disponibili sulla mia tastiera tedesco come parametro URL:
http://example.com/?^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=? `QWERTZUIOPÜ*ASDFGHJKLÖÄ\'>YXCVBNM;:_²³{[]}\|µ@€~
Questi non sono stati codificati:
^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-!/()=?`*;:_{}[]\|~
Non codificato dopo urlencode()
:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_
Non codificato dopo rawurlencode()
:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~
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 io non capisco perché ad esempio {}
sono codificati attraverso rawurlencode()
perché non sono menzionati nella RFC 3986.
Un'ulteriore prova che ho fatto è stato per quanto riguarda auto-linking nei testi di posta. Ho testato Mozilla Thunderbird, aol.com, outlook.com, gmail.com, gmx.de e yahoo.de e loro URL completi legati contenenti questi caratteri:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~+#,%&=*;:@
Naturalmente il ?
era legata, anche, ma solo se è stato usato una volta.
Alcune persone suggeriscono ora di utilizzare solo i caratteri rawurlencode()
, ma avete mai sentito che qualcuno ha avuto problemi ad aprire questi siti Web?
Asterisk
http://wayback.archive.org/web/*/http://google.com
Colon
https://en.wikipedia.org/wiki/Wikipedia:About
Inoltre
https://plus.google.com/+google
A segno, Colon, virgola e punto esclamativo
https://www.google.com/maps/place/USA/@36.2218457,...
A causa di ciò questi caratteri dovrebbe essere codificata utilizzabile senza problemi. Ovviamente non si dovrebbe usare &;
a causa di sequenze di codifica come &
. Lo stesso motivo è valido per %
poiché viene utilizzato per codificare i caratteri in generale. E =
come assegna un valore a un nome di parametro.
Infine vorrei dire il suo ok per utilizzare questi non codificata:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~!+,*:@
ma se vi aspettate generato in modo casuale URL non si dovrebbe usare .!
, perché quelli segnare la fine di una frase e alcune applicazioni di posta elettronica non si auto -collega l'ultimo carattere dell'URL. Esempio:
Visit http://example.com/foo=bar! !
I caratteri consentiti in un URI sono o riservati '* '();:!?. @ & = + $,/# []' O senza riserve 'A-Za-z0-9_ ~ - '(o un carattere percentuale'% 'come parte di una codifica percentuale) – Mikl
In MySQL io uso questo 'REGEXP' [^] A-Za-z0-9_. ~! * ''();: @ & = + $, /? # [% -] + ''per trovare la stringa dell'URL con caratteri non validi. Forse è utile anche per qualcun altro. – Mikl