【问题标题】:Why url encode, or which characters to encode为什么 url 编码,或者要编码哪些字符
【发布时间】:2012-02-23 13:41:57
【问题描述】:

http://www.w3schools.com/tags/ref_urlencode.asp

由于 URL 通常包含 ASCII 集之外的字符,因此 URL 具有 转换为有效的 ASCII 格式。

但是空格、/、% 都是 ASCII 字符集的一部分,那么为什么要首先对它们进行编码呢?应该对哪些字符进行编码?

【问题讨论】:

  • UTF-8 字符,或者来自不同字符集的任何字符。 ASCII 只是字符的最小范围。
  • 我不舒尔,但我认为每个字符都应该被编码,它们可能具有不同的含义(例如 & 和空格)。不要使用 w3schools.com,它与 w3c 无关,而且经常出错。

标签: javascript asp.net html web


【解决方案1】:

给你:

When are you supposed to use escape instead of encodeURI / encodeURIComponent?

这是我找到的最好的解释,对我很有帮助。

【讨论】:

    【解决方案2】:

    某些字符,例如空格,需要转义以确保有效的 url。在生成 GET 参数时,肯定会经常出现这种情况。

    【讨论】:

      【解决方案3】:

      如上所述,URL 中的空格无效。大多数浏览器或自动对其进行编码。不过……

      您链接到的页面在“试试我”部分中有一个使用“Günter”一词的示例。如果单词“Günter”作为查询字符串参数发送,它就不起作用。因为“ü”不在标准 ASCII 字符集中。

      它适用于可能存在非 ASCII 字符的情况。一个例子可能是使用数据库中的数据创建超链接。假设代码创建了一个指向用户个人资料页面的链接。未编码,我的是:

      <a href="profile/?username=David Stratton">Your profile</a>
      

      而君特的会是

      <a href="profile/?username=Günter">Your profile</a>
      

      我的,大多数浏览器都可以处理。 Günter 的,可能不是。

      编码,这些会变成

      <a href="profile/?username=David%20Stratton">Your profile</a>
      

      <a href="profile/?username=G%FCnter">Your profile</a>
      

      哪些是有效的 URL。

      (请原谅大多数精心设计的系统不会在这样的参数中传递用户名。这只是一个用于阐明概念的示例。)

      【讨论】:

      • 请不要只说“这行不通”。如果出现问题,至少说明它在另一方面的作用。
      【解决方案4】:

      应该对 URL 中的字符进行编码,因为某些字符根据 URL specification 具有特殊含义,某些字符是不允许的,并且某些字符不是在所有字符集中都可以表示的。

      请参阅this intro 以获得更多指导。

      关于您给出的字符示例,“/”保留用作 URL 中的组件分隔符,“%”用作转义字符。

      【讨论】:

      • “这个介绍”链接太棒了,解释了一切!!
      猜你喜欢
      • 1970-01-01
      • 2011-09-10
      • 2014-01-18
      • 2011-07-27
      • 2016-08-10
      • 2011-01-10
      • 1970-01-01
      • 2012-05-23
      相关资源
      最近更新 更多