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

Smartsheet API单元格传富文本含图片遇解析错误求助

解决Smartsheet API单元格值JSON解析错误(CR字符问题)

问题分析

错误提示明确指出JSON解析失败是因为未转义的CR控制字符(code 13,即\r),这类控制字符不能直接出现在未转义的JSON字符串中,必须进行转义或移除。你之前尝试的str_replace、nl2br等方法无效,核心原因是手动拼接JSON字符串的方式存在漏洞——即使处理了部分字符,也可能遗漏其他破坏JSON结构的特殊字符(比如双引号、换行符)。

解决方案

最可靠的解决方式是放弃手动拼接JSON,改用PHP的json_encode()函数自动生成符合规范的JSON字符串,它会自动处理所有需要转义的字符(包括\r、\n、双引号等)。

修改后的代码示例

// 构造请求数据数组
$requestData = [
    [
        "toBottom" => true,
        "cells" => [
            [
                "columnId" => 3894513397196676,
                "value" => $body
            ],
            [
                "columnId" => 6797054443317124,
                "value" => "Link",
                "hyperlink" => [
                    "url" => $current_url
                ]
            ],
            [
                "columnId" => 1167554909104004,
                "value" => "Assigned"
            ]
        ]
    ]
];

// 生成标准JSON字符串
$postFields = json_encode($requestData);

// 初始化CURL请求
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => 'API URL',
    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 => array(
        'Authorization: Values',
        'Content-Type: application/json'
    ),
));

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

备选方案(仅处理CR字符)

如果必须手动处理字符串,可以确保彻底移除或转义\r:

// 移除所有CR字符
$body = str_replace("\r", "", $body);
// 或者转义CR字符(适合需要保留换行语义的场景)
$body = str_replace("\r", "\\r", $body);

但这种方式无法覆盖其他可能破坏JSON的特殊字符,因此优先推荐使用json_encode()生成请求体。

内容的提问来源于stack exchange,提问作者vignesh raj kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:00:13