在URL中使用特殊符号是不是很糟糕?

时间:2010-12-17 17:28:51

标签: url url-encoding

上下文:ASP.NET MVC 2.0

我想支持以下格式的网址:

wowreforge.com?Exp=220,Hit<461,Mastery>Haste>Crit

它适用于FF和IE。它们在输入时都能正确转义符号。

我的问题:有没有理由不使用上面的网址表单?

背景
我希望URL可用作可以粘贴到线程讨论或即时消息中的通用公式。类似的东西:

  

我认为对于战斗流氓 wowreforge.com?Exp=220,Hit<461,Mastery>Haste>Crit 是最好的再造策略。

欢迎任何其他实施方案。

3 个答案:

答案 0 :(得分:1)

您应该始终通过Web框架的URL Encode功能运行此类值。这些函数将编码需要编码的值,而不编码那些不需要编码的值。

这比尝试猜测查询字符串中的哪些字符是正确的,哪些不是。

更好

另请注意,您应该对每个查询字符串参数的值应用此编码 - 而不是整个查询字符串本身。 (否则你最终会错误地编码拆分参数的&符号),例如

答案 1 :(得分:1)

网址中不允许

<>必须使用百分比编码进行编码。

但除此之外,浏览器显示网址与实际编码方式之间存在差异。例如,现代浏览器显示百分比编码的单词序列,这些单词表示UTF-8中的字符作为它们所代表的字符而不是编码的单词。因此,http://en.wikipedia.org/wiki/%C3%9F之类的网址通常会显示为http://en.wikipedia.org/wiki/ß,但实际上会将其编码为http://en.wikipedia.org/wiki/%C3%9F

答案 2 :(得分:0)

RFC 1738说这是个坏主意:

  

“...只有字母数字[0-9a-zA-Z],特殊字符”$ -_。+!*'(),“[不包括引号 - ed]和用于他们的保留字符保留的目的可以在URL中以未编码的方式使用。“

尝试使用ASCII控制代码对所有特殊字符进行编码。这是通过URL发送特殊字符的安全方式。