为什么要对url进行encode
2016-08-05
展开全部
这个问题涉及到URL的定义。我们知道URL是为了 统一的命名网络中的一个资源(URL不是单单为了HTTP协议而定义的,而是网络上的所有的协议都可以使用)。
所以这就要求URL有一些基本的特性:
1、URL是可移植的。(所有的网络协议都可以使用URL)
2、URL的完整性。(不能丢失数据,比如URL中包含二进制数据时,如何处理)
3、URL的可阅读性。(希望人能阅读)
因为一些历史的原因URL设计者使用US-ASCII字符集表示URL。(原因比如ASCII比较简单;所有的系统都支持ASCII)
为了满足URL的以上特性,设计者就将转义序列移植了进去,来实现通过ASCII字符集的有限子集对任意字符或数据进行编码。
以下是RFC3986中对转义部分的一些定义:
Reserved characters are those characters that sometimes have special meaning。
Unreserved characters have no such meanings。
就是说在RFC3986中Unreserved characters部分的字符是不需要转义的其他都需要。
PS:不同的编程语言对于URL的转义还不一样。比如Java中的URLEncoder是按照RFC2398转义,PHP5中的rawurlencode是按照RFC3986转义。
作者:秋水
来源:知乎
所以这就要求URL有一些基本的特性:
1、URL是可移植的。(所有的网络协议都可以使用URL)
2、URL的完整性。(不能丢失数据,比如URL中包含二进制数据时,如何处理)
3、URL的可阅读性。(希望人能阅读)
因为一些历史的原因URL设计者使用US-ASCII字符集表示URL。(原因比如ASCII比较简单;所有的系统都支持ASCII)
为了满足URL的以上特性,设计者就将转义序列移植了进去,来实现通过ASCII字符集的有限子集对任意字符或数据进行编码。
以下是RFC3986中对转义部分的一些定义:
Reserved characters are those characters that sometimes have special meaning。
Unreserved characters have no such meanings。
就是说在RFC3986中Unreserved characters部分的字符是不需要转义的其他都需要。
PS:不同的编程语言对于URL的转义还不一样。比如Java中的URLEncoder是按照RFC2398转义,PHP5中的rawurlencode是按照RFC3986转义。
作者:秋水
来源:知乎
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询