为啥 url 编码,或者要编码哪些字符

Posted

技术标签:

【中文标题】为啥 url 编码,或者要编码哪些字符【英文标题】: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 无关,而且经常出错。 【参考方案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 中的组件分隔符,“%”用作转义字符。

【讨论】:

“这个介绍”链接太棒了,解释了一切!!

以上是关于为啥 url 编码,或者要编码哪些字符的主要内容,如果未能解决你的问题,请参考以下文章

Python进阶篇四Python爬虫的URL编码/解码

为啥要进行url encode

文本编码

C# 对URL进行UTF-8编码 编码时为啥会把中文后面的第一个字母也转成了UTF-8呢?

前端常用的url编码方式

为啥MYSQL要设定用UTF8MB4编码UTF8MB4