PHP http_build_query的一个错误,手册未提及,求大神解决

飞奔的哇牛 2017-12-01 10:01:38
$post=array(
'partnerid'=>'5299516001',
'version'=>'1.4',
'request'=>'data',
'xmldata'=>'PG9yZGVyPjwvb3JkZXI%2B',
'validation'=>'3d11b4c3ce826a1571353613da50b30e',
);
这个是我要发送数据的数组
$str=http_build_query($post);
echo $str;
结果echo出来的
partnerid=5299516001&version=1.4&request=data&xmldata=PG9yZGVyPjwvb3JkZXI%252B&validation=3d11b4c3ce826a1571353613da50b30e
xmldata数据变得不一样了,在% 和2之间多了25,这是为什么
...全文
417 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dong-sir 2020-03-11
  • 打赏
  • 举报
回复
http_build_query
引用
enc_type 默认使用 PHP_QUERY_RFC1738。 如果 enc_type 是 PHP_QUERY_RFC1738,则编码将会以 » RFC 1738 标准和 application/x-www-form-urlencoded 媒体类型进行编码,空格会被编码成加号(+)。 如果 enc_type 是 PHP_QUERY_RFC3986,将根据 » RFC 3986 编码,空格会被百分号编码(%20)。
解决方法: php的http_build_query关于处理空格编码合理解决方法
xuzuning 2017-12-01
  • 打赏
  • 举报
回复
为什么会出错?不要想当然的说! 既然你使用了 http_build_query,那就表示对方是一个网站,而 web 服务器会完成第一层的 url 编码的解码工作 如果对方不是网站,不能自动解码的话,你可以手动解码(urldecode),或是说你的 http_build_query 用错了场合
飞奔的哇牛 2017-12-01
  • 打赏
  • 举报
回复
引用 1 楼 qq_34399969 的回复:
这个没问题吧,http_build_query貌似会进行url_encode的,你用url_decode解析下就可以看到了,不会影响使用的吧!
怎么可能不影响,要发送的数据不一样了,肯定要发送失败啊
hongmei85 2017-12-01
  • 打赏
  • 举报
回复

echo(urlencode('%'));
echo('<br/>');
echo(urldecode('%25'));
xuzuning 2017-12-01
  • 打赏
  • 举报
回复
使用给出的关联(或下标)数组生成一个 url-encoded 请求字符串。 注意这个,url 编码 echo urlencode('%'); //%25
老虎爱代码 2017-12-01
  • 打赏
  • 举报
回复
这个没问题吧,http_build_query貌似会进行url_encode的,你用url_decode解析下就可以看到了,不会影响使用的吧!
老虎爱代码 2017-12-01
  • 打赏
  • 举报
回复
版主说的很对啊!

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧