为了账号安全,请及时绑定邮箱和手机立即绑定

使用 http_build_query 时如何将 '%2' 替换为 '+'?

使用 http_build_query 时如何将 '%2' 替换为 '+'?

PHP
慕莱坞森 2021-10-15 15:50:03
我正在使用 Indeed api,我有一个如下所示的数组:$request = [    'useragent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',    'userip' => 1.2.3.4,    'q' => 'agricultural+OR+agriculture+OR+agronomic+OR+farm+OR+farming+OR+harvesting+OR+horticulture+OR+livestock',]当我使用http_build_query()它时,它会在查询的“q”部分删除“+”并用“%2”替换它们。print('?'.http_build_query($request));// ?useragent=Mozilla%2F5.0%20%28Macintosh%3B%20Intel%20Mac%20OS%20X%2010_12_6%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F74.0.3729.169%20Safari%2F537.36&userip=1.2.3.4q=agricultural%2BOR%2Bagriculture%2BOR%2Bagronomic%2BOR%2Bfarm%2BOR%2Bfarming%2BOR%2Bharvesting%2BOR%2Bhorticulture%2BOR%2Blivestock如果您在查询的“q”部分使用“%2”,Indeed API 将不起作用。我去做了一个字符串替换,但这与查询的“useragent”部分发生了冲突。我该怎么做才能让我的查询在查询的“q”部分正确包含“+”?我应该自己手动构建它吗?
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

问题是您的q值已经是 URL 编码的——+是在 URL 中编码空格的方法之一(它也可以编码为%20)。然后,当您调用类似 的函数时http_build_query(),它会再次被编码,但 API 不希望它被双重编码。


你不应该$request['q']首先编码。如果无法修复源,可以先解码:


$request['q'] = urldecode($request['q']);

print('?'.http_build_query($request));


查看完整回答
反对 回复 2021-10-15
  • 1 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信