Node.js cookie-parser返回编码字符

时间:2017-01-05 21:25:43

标签: javascript node.js cookies ascii url-encoding

我使用cookie-parser为用户提供签名的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 - 正确的价值。有谁知道如何自动处理它?非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您回来的字符串是urlencodedRFC 3986),这意味着您需要先解码它才能正常使用它。 (注意:维基百科将其列为'编码百分比'

JavaScript中的decode命令为unescape但是从JavaScript 1.5开始,不推荐使用此命令,您应该使用decodeURIdecodeURIComponent

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

UNESCAPE



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




decodeURI



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




decodeURIComponent



   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

相关问题