Могу ли я использовать символ (@) внутри URL?
Безопасно ли использовать @
символ как часть пользователя? Например, возможный URL будет http://example.com/@dave
,
Идея состоит в том, что в настоящее время пользователей обычно называют "@user", так почему бы не сделать страницу пользователя "@username"?
5 ответов
В процентах…
Вы можете использовать @
символ в путях HTTP URI, если вы кодируете его как процент %40
,
Многие браузеры будут отображать его как @
, но, например, когда вы копируете и вставляете URI в текстовый документ, он будет %40
,
... но и напрямую
Вместо процентного кодирования вы можете использовать @
непосредственно в пути HTTP URI.
Смотрите синтаксис для пути URI. За исключением различных несвязанных предложений, путь может состоять из символов в segment
, segment-nz
, или же segment-nz-nc
задавать. segment
а также segment-nz
состоят из персонажей из pchar
набор, который определяется как:
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
Как видите, @
указан явно.
segment-nz-nc
набор также перечисляет @
характер явно:
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
Итак, HTTP URI, как это, полностью действителен:
http://example.com/@dave
пример
Вот пример страницы Википедии:
- ссылка на сайт
- скопировать и вставить:
http://en.wikipedia.org/wiki/%22@%22_%28album%29
Как видите, "
, (
, а также )
символы кодируются в процентах, но @
и _
используется напрямую.
Можете ли вы использовать @-символ в URL? - Да, вы можете!
Обратите внимание, что символ @, шестнадцатеричное значение 40, десятичное значение 64 являются зарезервированными символами для URI. Он используется для таких вещей, как адреса электронной почты в mailto:
URI, например mailto:username@somewhere.foo
и для передачи имени пользователя и пароля по URI (что является плохой идеей, но возможно): http://username:password@somewhere.foo
Если вам нужен URL с символом @ в пути, вам необходимо его кодировать с помощью так называемой " кодировки URL". Например, вот так: http://somewhere.foo/profile/username%40somewhere.foo
Все современные браузеры будут отображать это как http://somewhere.foo/profile/username@somewhere.foo, и будут преобразовывать любые набранные @-sign в %40
, так что он прост в использовании.
Многие веб-фреймворки также помогут вам автоматически или с помощью вспомогательных функций преобразовывать URL-адреса в кодировку и из нее.
Итак, в заключение: да, вы можете использовать @-символ в URL, но вы должны убедиться, что он закодирован, так как вы не можете использовать @-символ.
В RFC используются следующие символы:
! * '();: @ & = + $, /? % # []
зарезервированы и:
Назначение зарезервированных символов - предоставить набор символов-разделителей, которые можно отличить от других данных в URI.
Поэтому не рекомендуется использовать эти символы без кодировки.
Я нашел этот вопрос, когда пытался выполнить поиск в Chrome, а затем получил результатThis page isn't working, ts-ignore is currently unable to handle this request
и я увидел, что URL-адрес стал «http://site:typescriptlang.org% /». Я чувствовал себя таким отвергнутым, затем искал@ symbol's function at an URL
а потом я нашел свой ответ в Википедии.
Полный формат URL-адресаscheme://userInfo@host:port/path?query#fragment
. поэтому, когда мы ищемsite:typescriptlang.org @ts-ignore
, браузер подумает, что вы хотите посетить "http://site:typescriptlang.org% [email protected][email protected] /". В этом URL-адресеhttp
это схема,site:typescriptlang.org%20
является userInfo ("%20" экранируется пробелом), "ts-ignore/" является хостом. Конечно, мы не можем зайти на хост с именем «ts-ignore» без домена.
Так,@
может быть разделителем междуuserInfo
иhost
.
В основном нет.
@
является зарезервированным символом и должен использоваться только по прямому назначению.
Смотрите: http://perishablepress.com/stop-using-unsafe-characters-in-urls/ и http://www.ietf.org/rfc/rfc3986.txt
Его можно использовать закодировано, но я не думаю, что это то, что вы спрашивали.
Видимо современные браузеры справятся с этим. Однако вы спросили, безопасно ли это, и в соответствии со спецификацией RFC вы не должны использовать его (без кодировки), если это не по назначению.