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
可以看看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
根据官方文档:
string urlencode(string $str)
此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。
返回字符串,此字符串中除了-_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW表单 POST 数据的编码方式是一样的,同时与application/x-www-form-urlencoded的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与RFC1738 编码不同。
解决方法:
使用rawurlencode进行编码
string rawurlencode(string $str)
根据 RFC 3986编码指定的字符。
返回字符串,此字符串中除了-_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在RFC 3986 中描述的编码,是为了保护原义字符以免其被解释为特殊的URL定界符,同时保护 URL格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。
rowurlencode 将空格转换成%20