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

时间:2019-07-17 22:25:49

标签: php

我正在使用Indeed api,并且有一个看起来像这样的数组:

var canvas = document.createElement('canvas');
canvas.width = 800;
canvas.height = 600;
document.body.appendChild(canvas);

document.addEventListener('mousemove',function(event){

    var similarX = event.clientX;
    var similarY = event.clientY;
    document.getElementById('body').innerHTML = "x:" + similarX + ", y:" + similarY;
})
var square = new Image();
square.src = 'square.png';

window.addEventListener('load' , start);

var c = canvas.getContext('2d');
function start() {
    c.fillStyle = 'green';
    c.fillRect = 10, 10, 30, 30;
    c.drawImage(square,similarX , similarY);

    window.requestAnimationFrame(start)
}
document.body.appendChild(canvas);

当我使用$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', ] 时,它会删除“ +”并在查询的“ q”部分将其替换为“%2”。

http_build_query()

如果您在查询的“ q”部分中使用“%2”,则确实API无法正常工作。我去做了一个字符串替换,但是与查询的“ useragent”部分息息相关。

我该怎么做才能使查询的“ q”部分正确带有“ +”?我应该自己手动构建它吗?

1 个答案:

答案 0 :(得分:1)

问题在于您的q值已被URL编码-+是对URL中的空格进行编码的一种方法(也可以将其编码为%20 )。然后,当您调用诸如http_build_query()之类的函数时,该函数将再次进行编码,但API并不希望它会被双重编码。

首先不应该对$request['q']进行编码。如果您无法修复源,则可以先对其进行解码:

$request['q'] = urldecode($request['q']);
print('?'.http_build_query($request));