javascript - Node.js cookie 解析器返回编码字符

标签 javascript node.js cookies ascii url-encoding

我正在使用 cookie 解析器为用户提供签名的 cookie,但我在手动解码它们时遇到问题。服务器返回带有隐藏十六进制代码的cookie(我猜?)。示例:

app.use(cookieParser('bar'));
...
res.cookie('nickname', 'foo', { signed: true });

然后我有一个带有奇怪 %3A 字符 nickname=s%3Afoo.FHkzIYqqvAuLEKKzpcNGhMjZQ0G88QpHNtxycPd0GFE 的 cookie,我无法解码它

cookieParser.signedCookie('s%3Afoo.FHkzIYqqvAuLEKKzpcNGhMjZQ0G88QpHNtxycPd0GFE', 'bar')

返回相同的字符串。当我将 %3A 更改为 : (十六进制编码?)时,例如

cookieParser.signedCookie('s:foo.FHkzIYqqvAuLEKKzpcNGhMjZQ0G88QpHNtxycPd0GFE', 'bar')

我得到了 foo - 正确的值。有谁知道如何自动处理它?非常感谢您的帮助。

最佳答案

您返回的字符串是 urlencoded ( RFC 3986 ) 这意味着您需要对其进行解码才能正常使用它。 (注意:维基百科将此列为“百分比编码”)

JavaScript 中的解码命令是 unescape但是从 JavaScript 1.5 开始,此命令已被弃用,您应该使用 decodeURIdecodeURIComponent相反。

使用这些命令的语法如下:

逃逸

   var foo = "Hello%20World"; // encoded string
   var bar = unescape("Hello%20World");
   console.log(bar);

解码URI

   var foo = "Hello%20World"; // encoded string
   var bar = decodeURI("Hello%20World");
   console.log(bar);

解码URIComponent

   var foo = "Hello%20World"; // encoded string
   var bar = decodeURIComponent("Hello%20World");
   console.log(bar);

以下图表来自 w3schools.com

Windows-1252 和 UTF-8 编码引用

encoded

ASCII 控制字符编码引用

enter image description here

关于javascript - Node.js cookie 解析器返回编码字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41494956/

相关文章:

Android:如何存储 cookie?

swift - 清除 webView cookies (Swift)

ruby-on-rails - 如何将登录用户名存储在 Rails 3 的 cookie 中?

javascript - jQuery.expr [':' ] 是如何工作的,jQuery1.8.x 及更高版本的文档记录在哪里?

javascript - 地理位置:按接近度过滤

javascript - AngularJS - 从 Controller 获取模块常量

javascript - Express:将一个方法的响应传递给同一篇文章中的另一个方法

JQuery 无法与 Node.js 一起使用

javascript - WebGL 地球 : how to get data from db and show popup over globe when click globe spot

javascript - node.js 中 Jade 模板的全局变量