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

LibreTranslate API:JS Fetch与PHP Curl调用结果不一致问题

问题原因

你的PHP请求与JavaScript请求的格式不匹配:

  • JavaScript发送的是JSON格式的请求体,q字段为数组类型,服务器能正确识别并完成批量翻译。
  • 当前PHP代码用http_build_query生成表单编码的请求体,还将q数组转成JSON字符串,服务器会把这个字符串当成单个待翻译文本,因此直接返回原内容;单个单词时q是普通字符串,所以能正常翻译。
  • 之前取消请求头注释后报错,是因为设置了Content-Type: application/json,但请求体仍为表单编码格式,服务器解析失败。
修正后的PHP代码
public function actionTest() {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://www.libretranslate.com/translate");
    curl_setopt($ch, CURLOPT_POST, 1);
    
    // 构造与JS完全一致的JSON请求体
    $postData = json_encode([
        'q' => ["maison", "chat"],
        'source' => 'fr',
        'target' => 'es',
        'format' => 'text', // 和JS保持一致,使用text而非html
        'api_key' => 'XXXXXXXXXXX'
    ]);
    
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    // 设置正确的Content-Type请求头
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json'
    ));

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $server_output = json_decode(curl_exec($ch));
    print_r($server_output);
    curl_close($ch);
}
关键修正点
  • 用json_encode生成完整的JSON请求体,和JavaScript的JSON.stringify行为保持一致。
  • 设置Content-Type: application/json请求头,明确告知服务器请求体为JSON格式。
  • 将format字段统一为text,避免不必要的格式差异影响结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:45:41