javascript - php json_encode() 以 JavaScript JSON.parse 无法解码的方式进行编码

标签 javascript php json

我正在尝试在 PHP 和 Javascript 之间工作,读取和写入包含我在 JS 和 PHP 中读入数组的 json 值的相同 cookie。

如果我将已使用 json_encode() 的 cookie 保存在我的 php 数组中,我发现生成的 cookie 的内容都已编码,就好像 url 编码一样。

问题是,当我尝试读取该 cookie 并使用

解码 JSON 时
var existing_array = readCookie('cookie_name');
JSON.parse(existing_array)

我收到一个 javascript 错误(例如 Uncaught SyntaxError: Unexpected token %)

如果我使用基于浏览器的 cookie 阅读器,我可以看到通过 javascript 保存的数组很容易读取: ["644","636"].

然而,当通过 json_encode() 函数在 PHP 中创建数组时,生成的内容最终类似于:%5B%22644%22%5D。

如果这种编码没有发生,我相信 JS 函数可以解码它。还有其他人经历过吗?我在 Windows 8 和最新的 Chrome 浏览器上使用 PHP 5.5。

最佳答案

Cookie 需要填充在 HTTP header 中,以便对它们进行编码以进行传输:

setcookie('cookie_name', '["644","636"]');

...触发器:

Set-Cookie: cookie_name=%5B%22644%22%2C%22636%22%5D

... 浏览器发回:

Cookie: cookie_name=%5B%22644%22%2C%22636%22%5D

您的 readCookie() 函数应该负责正确解码数据,但它似乎没有。如果你想修复它,你可以从中获取一些想法。 jquery-cookie插件:

function parseCookieValue(s) {
    if (s.indexOf('"') === 0) {
        // This is a quoted cookie as according to RFC2068, unescape...
        s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
    }

    try {
        // Replace server-side written pluses with spaces.
        // If we can't decode the cookie, ignore it, it's unusable.
        // If we can't parse the cookie, ignore it, it's unusable.
        s = decodeURIComponent(s.replace(pluses, ' '));
        return config.json ? JSON.parse(s) : s;
    } catch(e) {}
}

请注意decodeURIComponent部分。

关于javascript - php json_encode() 以 JavaScript JSON.parse 无法解码的方式进行编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29720806/

相关文章:

php - 用户名已被使用

php - 在新的 Wordpress 博客上从单独的计算机访问时主题不工作

javascript - Node.js 作为 JSON 转发器

javascript - 重复菜单上的 fullpage.js 事件状态

javascript - 如何获取包含对象和数组的数组的值?

php - 如何更新基本上具有年份的表列之一,我只需要增量更新

php - 通过 JSON、JQuery、PHP 传递特定信息

ios - 将包含 url 的数组中的图片添加到单元格的 imageView - iOS Xcode Obj C

javascript - Angular - 在方法开始和结束时触发 console.log() 的自定义方法装饰器

javascript - 即使我已经 $templateCached 了它们,Angular 仍然试图寻找模板