encode=QQ%3A%A3%A4%A3%A4%2B%2B|
decode=QQ:¥¥ |
声明只有content-type为application/x-www-form-urlencoded时才会对+做转义。
如果想偷懒可以直接用 rawurlencode/rawurldecode
也就是php又搞了rawurlencode和rawurldecode把标准实现了。。。。
(参考来源:http://www.jb51.net/article/29254.htm)
还有个问题:如果用url传递中文参数,请都使用encode后再传递,不然 IE 下通过_GET取到的数据可能会出问题,其他Firefox / 360 之类是正常的
在一次对接第三放接口接收回调请求时发现数据是已
url
encode之后请求过来的
经过
url
decode
之后再base64解密发现数据乱码,打印之后发现是
url
decode
之后的
字符串
中
的+被解析
成
了
空格
导致解密错误
$raw = file_get_contents("
php
://input");
##解密
url
parse_str(raw
url
decode
($raw), $arr);
$data = json_
decode
($arr['
一.这个要看你实现什么标准的
URL
Encode的了。
1.在1994年订立的RFC1738
中
。
对
字符串
中
除了-_.三个字符之外的所有非字母数字字符都替换
成
百分号(%)后跟两位十六进制数。
十六进制数
中
字母必须为大写。
2.在2005年定义的RFC3986
中
,将针对- _.~(可见又扩充了一个波浪线字符)四个字符之外的所有非字母数字字符进行百分号编码。
在Java和
PHP
当
中
,由于历史原因,导致在进行
URL
Encode的时候,会将
空格
编码为+,而不是编码为十六进制编码%20
3.在
php
当
中
也提供了标准
当然,前端在接收时可以解码后进行替换 + 为
空格
的方式处理。
但是这样就多做了一步,很麻烦,有的时候我们的数据接口是开发给第三方或者其他使用的,他们在处理
中
不一定完全按照这样的思路来做。
解决方案:
使用raw
url
encode
在
PHP
中
,
url
encode把
空格
编码为+号...
在浏览器输入 http://localhost/
url
decode
.
php
?a=1&b=2 1
浏览器自动转换为http://localhost/
url
decode
.
php
?a=1&b=2%201
无论在
url
decode
.
php
解码也好不解码也好,都是显示
空格
不会显示%20
<?
php
echo 'a:'.$_GET['a'];
ec...
问题
起因:
客户订购了一关键字为"e+h 变送器" , 在首页推荐广告
中
,会根据用户在search 搜索过的关键字进行一个匹配投放。技术实现是UED 通过JS 获取cookie
中
的h_keys 内容,拼装到 http://xxxxx/advert/ctp_advert.htm?num=4&keyword= {keyword} 。
这里取出来对应的cookie 信息为
中
文,最后通
var name = a+b;
window.location.href = ctx + "/companyRiskPreview/toRiskScanView?name=" + name;
页面跳转后在浏览器
中
就会变为
http://127.0.0.1:8080/ljzx/compa...