Я перевірив це, подавши запит на свій веб-сайт (apache) з усіма доступними символами на моїй німецькій клавіатурі як параметр URL:
http://example.com/?^1234567890ß´qwertzuiopü+asdfghjklöä#<yxcvbnm,.-°!"§$%&/()=? `QWERTZUIOPÜ*ASDFGHJKLÖÄ\'>YXCVBNM;:_²³{[]}\|µ@€~
Вони не були закодовані:
^0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.-!/()=?`*;:_{}[]\|~
Не кодується після urlencode()
:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_
Не кодується після rawurlencode()
:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~
Примітка: Перед rawurlencode()
кодуванням PHP 5.3.0 ~
через RFC 1738 . Але це було замінено RFC 3986, так що його зараз безпечно використовувати. Але я не розумію, чому, наприклад {}
, кодуються через те, rawurlencode()
що вони не згадуються в RFC 3986.
Додатковий тест, який я зробив, стосувався автоматичного посилання на тексти пошти. Я перевірив Mozilla Thunderbird, aol.com, outlook.com, gmail.com, gmx.de та yahoo.de, і вони повністю пов’язали URL-адреси, що містять ці символи:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~+#,%&=*;:@
Звичайно ?
, теж було пов'язано, але тільки якщо воно було використано один раз.
Деякі люди зараз пропонують використовувати лише rawurlencode()
символи, але чи чули ви коли-небудь проблеми, щоб відкрити ці веб-сайти?
Зірочка
http://wayback.archive.org/web/*/http://google.com
Колон https://en.wikipedia.org/wiki/Wikipedia: About
Плюс
https://plus.google.com/+google
Під знаком Колон, Кома та знак оклику
https: //www.google.com/maps/place/USA/@36.2218457, ...
Через це ці символи повинні бути без використання кодованими без проблем. Звичайно, ви не повинні використовувати &;
через кодування таких послідовностей &
. Ця ж причина є дійсною і %
для кодування символів в цілому. І =
як він привласнює значення імені параметра.
Нарешті, я б сказав, добре використовувати ці незашифровані:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_~!+,*:@
Але якщо ви очікуєте генерованих випадковим чином URL-адрес, ви не повинні використовувати .!
, оскільки вони позначають кінець речення, а деякі поштові програми не автоматично пов'язують останній знак URL-адреси. Приклад:
Visit http://example.com/foo=bar! !
!*'();:@&=+$,/?#[]
або незарезервованимиA-Za-z0-9_.~-
(або відсотковими символами%
як частиною відсоткового кодування)