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

PHP如何将json_encode结果正确存入Cookie 避免JS解析报错

问题原因

你使用的Cookie存储逻辑默认会自动对值做URL编码:PHP原生的setcookie方法本身就会自动转义特殊字符,大部分PHP框架封装的Cookie类也默认继承了这个逻辑,所以你存入的JSON字符串的{、"等特殊字符都会被转为%XX格式的URL编码字符,前端直接读取后自然不是合法的JSON结构,触发解析错误。

解决方案

你可以根据业务情况任选以下两种方案:

方案1:前端侧处理(推荐,改造成本最低)

读取Cookie后先做URL解码,再调用JSON.parse解析即可,示例代码如下:

// 读取Cookie的通用方法,可替换为你自己的原有逻辑
function getCookie(cookieName) {
  const name = cookieName + "=";
  const decodedCookie = decodeURIComponent(document.cookie);
  const ca = decodedCookie.split(';');
  for(let i = 0; i <ca.length; i++) {
    let c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

// 解码+解析
const rawCookieValue = getCookie('你的Cookie名称');
const config = JSON.parse(decodeURIComponent(rawCookieValue));

方案2:后端侧关闭Cookie自动编码

如果希望Cookie直接存储原始JSON字符串,不需要前端额外处理,可以修改存储逻辑:

  • 如果你是用PHP原生方法封装的Cookie类,将setcookie替换为setrawcookie即可,后者不会自动对值做URL编码
  • 如果你使用的是PHP框架的Cookie组件,查找对应关闭自动编码/自动加密的配置:比如Laravel框架可以先将该Cookie名称添加到App\Http\Middleware\EncryptCookies的$except排除加密列表,存储时调用Cookie::raw方法生成原始Cookie即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:54:03