php - 使用 http_build_query 时,如何将 '%2' 替换为 '+'?
问题描述
我正在使用 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 将不起作用。我去进行字符串替换,但这与查询的“用户代理”部分发生了冲突。
我该怎么做才能使我的查询在查询的“q”部分正确包含“+”?我应该自己手动构建吗?
解决方案
问题是您的q
值已经是 URL 编码的——+
这是在 URL 中编码空格的方法之一(它也可以编码为%20
)。然后,当您调用类似的函数时http_build_query()
,它会被第二次编码,但 API 不希望它被双重编码。
你不应该$request['q']
首先编码。如果无法修复源,可以先解码:
$request['q'] = urldecode($request['q']);
print('?'.http_build_query($request));
推荐阅读
- excel - 强制 Excel VBA 脚本以 UTF-8 格式加载文件
- node.js - 我的代码给出了 Mongoose 服务器选择错误
- c++ - Buildroot 编译错误 - 也许您需要增加文件系统大小 (BR2_TARGET_ROOTFS_EXT2_SIZE)
- xcode - 启动画面在设备和情节提要上看起来不同
- laravel - 如何检查数据库中的用户密码是否为空并将该信息传递给 Vue 应用程序?
- php - 替换“特定”类别的商店和档案页面上的“添加到购物车”文本
- python - Python,编写 XML 文件 - 'charmap' 编解码器无法编码字符。包含要修复的编码时,get 必须是 str,而不是 bytes
- javascript - 如何确定正常矩形和旋转矩形之间是否存在碰撞?
- javascript - (JavaScript) 从用户输入框中查找圆的面积
- amazon-web-services - 在安全性方面使用 ec2 复制亚马逊工作场所