带有编码字符的 Angular cookie

Posted

技术标签:

【中文标题】带有编码字符的 Angular cookie【英文标题】:Angular cookies appearing with encoded characters 【发布时间】:2013-06-06 08:30:42 【问题描述】:

给定一些数据:

$scope.devices = [
   name: 'iPhone 4', os: 'ios',
   name: 'Nexus 7', os: 'android',
];

还有一个设置cookie的函数:

$scope.saveDeviceChoice = function() 
  $cookieStore.put('savedDevice', $scope.deviceChoice.name);

我得到一个值为 %22Nexus%207%22 的 cookie,而不是我所期望的:Nexus 7。

这就是它在网络检查器中的样子

我真的很困惑 - 似乎 %22 是一个引号,而 %20 是一个空格,不知何故这个值被“编码”了。谁知道发生了什么?

【问题讨论】:

【参考方案1】:

这里是 $cookieStore 的官方文档:

提供由会话 cookie 支持的键值(字符串对象)存储。从此存储中放入或检索的对象由 angular 的 toJson/fromJson 自动序列化或反序列化。

然后商店保存 URL 编码 版本的值。看看this article,有一节解释cookie编码。

【讨论】:

从后端读取 cookie 时很痛苦,您必须将其解码才能使用它【参考方案2】:

$cookieStore.(get/put) 在您发送过来的值上自动运行到 Json 或从 Json 运行,这会附加编码字符。

如果您只使用 $cookies,那么您可以通过设置参数来逃避

$cookies['savedDevice'] = $scope.deviceChoice.name;

$cookies.savedDevice = $scope.deviceChoice.name;

无论哪种方式,值都会按照您想要的方式保存。

$cookieStore 的使用很流行,但是如果您想使用服务器上的值,它会自带包袱。

【讨论】:

以上是关于带有编码字符的 Angular cookie的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 7 中对包含特殊字符的查询参数进行编码?

angular4 组件 css 附加带有背景图像名称的随机字符串

Angular 2 将图像编码为 base64

base 64 以角度编码和解码字符串 (2+)

带有 Angular 8 和 Springboot 2 的 JWT:JWT 字符串必须恰好包含 2 个句点字符

使用带有 Angular 的 $http 的 PUT 方法时向查询字符串添加参数