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
相关产品推荐
相关产品推荐

