我可以在URL中使用at符号(@)吗?


90

@符号用作用户的一部分是否安全?例如,可能的网址为http://example.com/@dave

现在的想法是,用户通常被称为“ @user”,那么为什么不将用户页面设置为“ @username”呢?


2
“用户通常称为@user”-WAT?但是可以,您可以在URL中使用@。
Lennart Regebro 2013年

1
我认为在网址中使用@除非有正确的网址编码,否则没有错。
Praveen

4
@ user1671639:我认为您的意思是“只要它经过正确的url编码”。
Lennart Regebro

3
刚刚注意到,谷歌地图现在在其网址中使用@:google.com/maps/@0,0,2z
Zv_oDD 2014年

Answers:


126

百分比编码…

如果将@字符百分比编码为,则可以在HTTP URI路径中使用该字符%40

许多浏览器会将其显示为@,但是例如,当您将URI复制并粘贴到文本文档中时,它将为%40

…而且直接

您可以@直接在HTTP URI路径中使用它,而不是对其进行百分比编码。

请参阅URI路径的语法。各种不相关的条款之外,该路径可以由在字符的segmentsegment-nzsegment-nz-nc组。segmentsegment-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

这是Wikipedia页面的示例:

  • 链接
  • 复制和粘贴: http://en.wikipedia.org/wiki/%22@%22_%28album%29

正如你所看到的"()字符百分比编码,但@_直接使用。


好消息!但是,为什么Twitter不这样做呢?
奥古斯丁·里丁格

1
@AugustinRiedinger:您能否提供示例URL?我不使用Twitter,并从我所看到的,他们不使用@的网址了,但旧的配置文件的URL仍然有效(?):例如用百分比编码@(也没有工作!)使用例如@直接(不工作!)
2015年

有趣!的确,无论是否@使用Twitter ,都可以使用。他们的内部链接确实引用了该网址,@尽管没有:twitter.com/@stackexchange
Augustin Riedinger,2015年

1
@RalphCallaway:AFAIK未保留的字符等效于它们的百分比编码形式,但@不是未保留的。所以,消费者一定不要假设%40@是等价的。
2016年

1
Many browsers would display it still as @, but e.g. when you copy-and-paste the URI into a text document, it will be %40.Chrome并非如此。
Defozo '16

42

您可以在网址中使用@符号吗?-是的,可以!

请注意,@字符,十六进制值40,十进制值64,是URI的保留字符。它的用途是用于诸如mailto:URI中的电子邮件地址之类的事情,mailto:username@somewhere.foo以及用于在URI上传递用户名和密码信息(这是一个坏主意,但可能):http://username:password@somewhere.foo

如果您想要一个在路径中带有@符号的URL,则需要对其进行编码,即所谓的“ URL-encoding ”。例如这样:http://somewhere.foo/profile/username%40somewhere.foo

所有现代的浏览器都将其显示为http://somewhere.foo/profile/username@somewhere.foo,并将所有@ -sign输入转换为%40,因此易于使用。

许多网络框架还可以自动或通过辅助功能来帮助您在URL编码的URL之间进行转换。

因此,总而言之:是的,您可以在URL中使用@符号,但是您必须确保已对​​其进行编码,因为您不能使用@字符


+1完美。与其更好地依靠理论,不如尝试一下。这就是我的意思,感谢您做出的很好的回答。
Praveen

4
尽管编码不是坏主意,@字符不“需要”的网址(的路径部分进行编码greenbytes.de/tech/webdav/rfc3986.html#path
brianreavis

11

RFC中,以下字符:

!*'(); :@&= + $,/?%#[]

保留,并且:

保留字符的目的是提供一组与URI中的其他数据区分开的定界字符。

因此,建议不要在不进行编码的情况下使用这些字符。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.