You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中CURL请求含空格URL的过滤失效问题求助

问题解决方法

你的代码里有两个核心问题导致filter失效:

  1. GET请求参数传递方式错误:你用CURLOPT_GETFIELDS传递filter参数,但这个选项是给POST/PUT这类带请求体的请求用的,GET请求的参数必须直接拼在URL里,否则API根本识别不到你的过滤条件。
  2. 邮箱地址未做URL编码:如果$row['emailadres']包含空格、@或其他特殊字符,直接拼进URL会破坏参数格式,导致filter解析失败。

修正后的代码如下:

// 对邮箱地址做URL编码,处理空格、@等特殊字符
$encodedEmail = urlencode($row['emailadres']);
// 把filter参数直接拼接到URL末尾,修正原URL的拼接逻辑
$url = "https://api.businesscentral.dynamics.com/v2.0/{$tenant}/Prod/ODataV4/Company('Cronus_Test')/CMS_Klant?filter=E_Mail eq '{$encodedEmail}'";

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    // 移除无效的CURLOPT_GETFIELDS配置
    CURLOPT_HTTPHEADER => array(
        // 移除GET请求不需要的content-type头
        "Authorization: Bearer {$token}"
    ),
));
$response = curl_exec($curl);
curl_close($curl);

额外注意事项:

  • 若需传递多个GET参数,用&分隔(比如?filter=...&$top=10),且每个参数值都要做URL编码
  • 提前检查$row['emailadres']是否为空,避免生成无效的过滤条件

内容的提问来源于stack exchange,提问作者Matthijs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:37:16