Url编码与HTML编码的区别

97

9
如果你想将某些内容编码以在URL中使用,你需要使用URL编码。如果你想将某些内容进行编码以在HTML页面上显示,你需要进行HTML编码。 - Mitch Wheat
7
URL编码会将字符编码为适用于URL的格式。例如,?会变成%3F。HTML编码会将字符编码为适用于HTML的格式。例如,<会变成&lt; - Matt Ellen
5个回答

94

HTML编码会转义在HTML文档中使用的字符串中的特殊字符,以避免与HTML元素混淆,例如改变了元素的意义。

"<hello>world</hello>" 

"&lt;hello&gt;world&lt;/hello&gt;"

URL 编码对 URL 中的字符串值进行类似的转换,比如将空格字符转换为“%20”。

"hello+world = hello world"

"hello%2Bworld+%3D+hello+world"

18
HTML 编码和 URL 编码的本质不同。例如,如果您对“hello world”进行 HTML 编码并尝试将其添加到 URL 中,则会得到一个无效的 URL。两者都很重要,并应根据不同情况使用。 - Neil
1
刚刚不得不检查并替换了几个使用HtmlEncode编码URL的用法,因为在编码空格和其他一些特殊字符时出现了问题。 - PJUK
注意,使用HtmlEncode代替UrlEncode在URL中可能会出现问题,因为HtmlEncode会将"&"字符放置在字符串的各个位置。根据您的Web服务接收URL所期望的内容,一些额外的"&"字符可能会带来很大的问题。例如,如果您的Web服务期望在URL中每个参数之前都有一个"&"字符,但是您使用了HtmlEncode添加了一堆额外的"&"字符,那么当您的Web服务尝试解释这个URL时,您可能会遇到错误。出于这个原因,我不得不将几次使用HtmlEncode的地方替换成UrlEncode。 - jdnew18
3
请不要听 Phill 的话。我觉得他使用查询字符串和 HtmlEncode 来创建现代 URL,而不是使用 UrlEncode,这一点让我难以置信。说 UrlEncode 大多数情况下都没用是我在此网站上看到的最荒谬的事情之一。请忽略他的建议。 - Nard Dog

26

urlEncode将特殊字符替换为可被Web浏览器/Web服务器理解的字符,以便用于寻址...所以是URL。例如,空格被替换为 %20,' 被替换为 %27,等等...

参考资料如下:

HtmlEncode将特殊字符替换为HTML引擎本身可以识别的字符串,以呈现页面内容 - 例如,& 变成 &amp;< 变成 &lt;> 变成 &gt;这样可以防止HTML引擎将这些字符解释为HTML标记的一部分,从而将它们呈现为字符串。

参考资料如下:


1
实际上,URLEncode会将空格替换为+,这在某些情况下可能会成为问题。 - NetMage

13

HTML和URL本质上都是非常受限制的语言。作为一种语言,它们为特定的关键词或运算符添加了含义。对于这两种语言而言,关键词几乎总是单个字符。例如:

  • HTML:>和<
  • URL:/和:

然而,在每种语言的使用中,有可能以不确保语言含义的方式使用这些结构。例如,此文章包含一个>字符。我不希望它被解释为HTML,而只是文本。

这就是编码和解码方法发挥作用的地方。这些方法分别将字符串转换为任何会被视为关键词的字符,转换为已转义形式,不会被解释为语言的一部分。

例如:将>传递到HtmlEncode中将返回&gt;


3

HTMLEncode和URLEncode用于处理HTML和URL中的无效字符,更准确地说,是需要特殊编写以正确解释的字符。例如,在HTML中,<和>字符用于表示标签。因此,如果您想编写一个数学公式,类似于1+1 < 2+2,"<"通常会被解释为标签的开始。HTMLEncoding将此字符转换为"&lt;",这是小于号的编码表示。URLEncoding执行相同的操作,但针对URL,其特殊字符不同,尽管存在一些重叠。


2
我不知道您在使用哪种语言,但是例如 PHP 手册 提供了良好的解释。

URLEncode

返回一个字符串,其中所有非字母数字字符(除了-_)都已替换为百分号(%)后跟两个十六进制数字,并将空格编码为加号(+)。它以与应用程序/x-www-form-urlencoded媒体类型相同的方式进行编码,即与从 WWW 表单发布的数据相同。这与 »RFC 1738 编码(请参见 rawurlencode())不同之处在于,由于历史原因,空格被编码为加号(+)。

继续阅读


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接