gpt4 book ai didi

Javascript - 从 cookie 中检索数据为 "value"而不是 "raw data"

转载 作者:行者123 更新时间:2023-11-29 17:48:53 25 4
gpt4 key购买 nike

使用“Wordpress Favourites”插件创建的 cookie,从 cookie 中检索值时,使用建议的函数。

    // Read Cookie For Favorites Functionality - simplefavourites
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
}

我们得到了“RAW DATA”……我指的是你在使用 firebug 时看到的文本 -> cookies -> 选择 cookie -> 切换到“原始数据” View 。

看起来像这样:

%5B%7B%22site_id%22%3A1%2C%22posts%22%3A%5B17411%2C22578%5D%2C%22groups%22%3A%5B%7B%22group_id%22%3A1%2C %22site_id%22%3A1%2C%22group_name%22%3A%22Default+List%22%2C%22posts%22%3A%5B17411%2C22578%5D%7D%5D%7D%5D

当我们真正想要的是来自“值”的文本,看起来像这样,用于接口(interface) jQuery。

[{"site_id":1,"posts":[17411,22578],"groups":[{"group_id":1,"site_id":1,"group_name":"默认列表","帖子":[17411,22578]}]}]

我知道它们之间的唯一区别是字符转换,但我们真的想避免每次运行此函数时的字符转换开销,只是为了从 cookie 中检索一个简单的值数组。

是否可以将 cookie 内容读取为“值”而不是“原始数据”?

提前感谢您的反馈。

------------建议的解决方案----------------处理来自@Louys Patrice Bessette 的反馈

    // Read Cookie For Favorites Functionality - simplefavourites
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
var cookiecontents = readCookie('simplefavorites');
cookiecontents = decodeURI(cookiecontents);
alert(cookiecontents);

这会将 cookie 值返回为:[{"site_id"%3A1%2C"posts"%3A[17411%2C22578]%2C"groups"%3A[{"group_id"%3A1%2C"site_id"%3A1%2C"group_name"%3A “默认+列表”%2C“帖子”%3A[17411%2C22578]}]}]

这清除了一些字符翻译但不是全部,看起来像“:”和“,”没有得到“解码”

------------问题已解决----------------处理来自@Louys Patrice Bessette 的反馈

    // Read Cookie For Favorites Functionality - simplefavourites
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
var cookiecontents = readCookie('simplefavorites');
cookiecontents = decodeURI(cookiecontents.replace(/%3A/g, ":").replace(/%2C/g, ",").replace(/\+/g, "%20"));
alert(cookiecontents);

最佳答案

那不是“原始数据”,而是 URL 编码字符串。

如果您希望结果是对象、数组或包含 URL 中不允许的字符的字符串,请对 readCookie() 返回的值使用 decodeURI() .

参见 MDN Documentation和一个 W3C School example .


编辑

好像你的 cookie 被奇怪地编码了......

一些不需要编码的字符是...
有些需要的却没有。

在你的字符串中,我找到了 3。

%3A ==> :
%2C ==> ,
+ ==> %20

因此正确解码 cookie 的方法是:

var correctlyDecoded = decodeURI(cookieVal.replace(/%3A/g, ":").replace(/%2C/g, ",").replace(/\+/g, "%20"));

你应该仔细看看你的 cookie 是如何编码的......因为它可能恰好在其他 cookie 中有更多的错误字符。

您将能够使用 this CodePen找到那些。

关于Javascript - 从 cookie 中检索数据为 "value"而不是 "raw data",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46122768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com