urlencode进行转换后 为啥空格是+号 不是%20

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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



参考技术A

可以看看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。

使用编码函数就可以将特定字符转换成规定的字符编码,包括空格等。解码函数功能刚好相反。参数是需要处理的字符串,返回值是处理好的字符串。不过这些函数作用都有差异,详细内容可以自己查看资料。

扩展资料:

本函数将字符串以URL编码。例如空格就会变成加号。Homepage 中 form 资料传送就是用 urlencode 编码后再送出。

统一资源标识符(URI)所允许的字符分作保留与未保留,保留字符是那些具有特殊含义的字符。例如,斜线字符用于URL (或者更一般的, URI)不同部分的分界符,未保留字符没有这些特殊含义。百分号编码(Percent-encoding)把保留字符表示为特殊字符序列。上述情形随URI与URI的不同版本规格会有轻微的变化。

参考资料来源:百度百科-urlencode

参考技术B

根据官方文档:

string urlencode(string $str)

此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。

返回字符串,此字符串中除了-_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW表单 POST 数据的编码方式是一样的,同时与application/x-www-form-urlencoded的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与RFC1738 编码不同。 


解决方法:

使用rawurlencode进行编码

string rawurlencode(string $str)

根据 RFC 3986编码指定的字符。 

返回字符串,此字符串中除了-_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在RFC 3986 中描述的编码,是为了保护原义字符以免其被解释为特殊的URL定界符,同时保护 URL格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。

参考技术C 搜索关键词的时候,会将空格转换为加号,这是程序设定的,多条件搜索 参考技术D urlencode 将空格转换成+号
rowurlencode 将空格转换成%20本回答被提问者和网友采纳

以上是关于urlencode进行转换后 为啥空格是+号 不是%20的主要内容,如果未能解决你的问题,请参考以下文章

Android:URLEncoder空格被转码为“+”号

Android:URLEncoder空格被转码为“+”号

PHP使用urlencode对中文编码时空格加号的问题

php 浏览器URL加密函数urlencode 和rawurlencode函数

记一次URL参数处理

为啥要进行url encode