我正在使用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”部分正确带有“ +”?我应该自己手动构建它吗?
答案 0 :(得分:1)
问题在于您的q
值已被URL编码-+
是对URL中的空格进行编码的一种方法(也可以将其编码为%20
)。然后,当您调用诸如http_build_query()
之类的函数时,该函数将再次进行编码,但API并不希望它会被双重编码。
首先不应该对$request['q']
进行编码。如果您无法修复源,则可以先对其进行解码:
$request['q'] = urldecode($request['q']);
print('?'.http_build_query($request));