urlencode(什么是urlencode编码)
你是否对于urlencode和什么是urlencode编码感到困惑?别担心,今天小编将为您揭开这个谜团,让我们一同探索吧!
什么是urlencode编码
不是很理解你的意思
从HTTP协议来讲,一个标准的URL是有固定的编码方式的,它只能包含固定的字符集
比如你输入一个网址
http://www.baidu.com/s?wd=我&cl=3,在访问这个网址的时候
网络上传输的时候,‘我’这字会变成%CE%D2这种编码
网站收到你这个网址的时候,再把%CE%D2转换成‘我’字才能理解你这个网址的意思
为什么需要urlEncode
字符串数据以url的形式传递给web服务器时,对字符是有限制的。为了符合url的规范,这些被限制的字符,就需要被转义。比方说:把一个邮箱放入url就需要转义,因为邮箱中包含限制字符@。
在标准的url规范中,中文和很多的字符是不允许出现在url中的。这些需要转义的字符都将被替换成%后跟两位十六进制数。
这些字符都是不可打印的,自然需要进行转化。
例如:emoji字符👴🏻👮🏽,转化也是理所当然的。
url中的分隔符包含主要分隔符:#[]@?/和次要分隔符!$&'()*+,;=。对于url的 query参数和值,如果在分隔符的包含范围内,除了?和/外,都需要转义。例如:对于原始url https://www.baidu.com?paramA=哈哈¶mB=&来说,哈哈和 paramB=&中的&就需要参与转义。否则,对于&来说,你认为它是一个参数值,还是url本身的分隔符呢?
例如:空格。为了避免歧义,需要被转化成+或者%20。具体转换成+还是%20主要依据不同的转换标准。
AFURLRequestSerialization的源码很好地说明了转义的过程和规则:
urlencode进行转换后 为什么空格是+号 不是%20
可以看看PHP的函数urlencode()和 rawurlencode()函数的实现方式,第二个是raw转换,会把对应的空格更换成%20的编码方式。
%20是空格的 URL字符编码。
[ol][*] [*]$new_true_url= iconv(\'gbk\',\'utf-8\',$true_url);
[*]$down_true_url=??urlencode($new_true_url);
[*]$down_true_url=str_replace(\"%3A%2F%2F\", \"://\",$down_tr。
使用编码函数就可以将特定字符转换成规定的字符编码,包括空格等。解码函数功能刚好相反。参数是需要处理的字符串,返回值是处理好的字符串。不过这些函数作用都有差异,详细内容可以自己查看资料。
扩展资料:
编码原理:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。
比如:
空格ASCII码是32,对应16进制是20,那么urlencode编码结果是:%20,但在新标准中空格对应的是+,见RFC-1738
比如:
中ASCII码是-10544,对应的16进制是D6D0,那么urlencode编码结果是:%D6%D0。
参考资料来源:百度百科-urlencode
求解,htmlencode和urlencode的区别,适用场合
htmlencode的目的:将<和>尖括号等符号转掉,避免网页直接渲染标签,防止攻击。
"<hello>world</hello>"
转成
"<hello>world</hello>"
urlencode的目的:将url中的特殊字符转义,让浏览器方便处理,比如空格、加号等
(url只能使用ASCII character-set,除此之外,都要转义)
"hello+world= hello world"
转成
"hello%2Bworld+%3D+hello+world"
除了-_.之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW表单 POST数据的编码方式是一样的,同时与 application/x-www-form-urlencoded的媒体类型编码方式一样。
非常感谢您的阅读!我们希望本文对于解决您关于urlencode和什么是urlencode编码的问题提供了一些有价值的信息。如果您还有其他疑问,我们将很乐意为您提供进一步的帮助。