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

如何在PHP CURL POST请求中正确发送含法语字符的内容

问题解决:PHP Curl发送法语短信异常

根因说明

你遇到的问题核心是POST参数未做规范URL编码,以及没有保证字符编码全链路一致:

  • 法语包含大量非ASCII特殊字符(如é、è、ê等),直接拼接到POST参数字符串中会破坏x-www-form-urlencoded格式的结构,服务端无法正常解析参数,而纯英文都是ASCII字符,不会触发该问题
  • 即使配置了UTF-8的请求头,只要参数本身编码/转义错误,服务端还是会识别异常

修复步骤

  1. 不要手动拼接POST参数字符串,将参数封装为数组传给CURLOPT_POSTFIELDS,CURL会自动完成符合规范的URL编码,无需手动处理
  2. 确认你的PHP源文件以UTF-8无BOM格式保存,保证硬编码的法语文本本身编码正确
  3. 签名逻辑要和参数编码保持一致,避免服务端签名校验失败

修复后代码

// 推荐用json_encode生成JSON,避免硬写转义符出错
$sms = json_encode([
    'text' => [
        'fr' => 'Bienvenue sur Gamebar! Accédez au service et gérer votre abonnement sur'
    ]
], JSON_UNESCAPED_UNICODE);

$ordered_params = [
    'order' => '112423',
    'prompt_content_args' => $sms
];

$to_sign = '';
foreach ($ordered_params as $v) { 
    $to_sign .= $v;
}
// 仅当你的PHP文件是ISO-8859-1编码时才启用下面这行
// $to_sign = utf8_encode($to_sign);
$digest = hash_hmac('sha256', $to_sign, '8awIiFHqV8zlimG'); 

$curl = curl_init();
// POST参数用数组传递,CURL自动编码
$postFields = [
    'digest' => $digest,
    'order' => '112423',
    'prompt_content_args' => $sms
];
curl_setopt_array($curl, [
    CURLOPT_URL => "https://url.com",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => $postFields,
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/x-www-form-urlencoded; charset=utf-8"
    ],
]);

$result = curl_exec($curl);
curl_close($curl);

提示:json_encode的JSON_UNESCAPED_UNICODE参数可以保留法语等非ASCII字符的原始格式,不需要转义为\uXXXX序列,适配绝大多数服务端的JSON解析规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 00:36:07