我使用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
- 正确的价值。有谁知道如何自动处理它?非常感谢你的帮助。
答案 0 :(得分:1)
您回来的字符串是urlencoded(RFC 3986),这意味着您需要先解码它才能正常使用它。 (注意:维基百科将其列为'编码百分比' )
JavaScript中的decode命令为unescape但是从JavaScript 1.5开始,不推荐使用此命令,您应该使用decodeURI或decodeURIComponent。
使用这些命令的语法如下:
var foo = "Hello%20World"; // encoded string
var bar = unescape("Hello%20World");
console.log(bar);

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

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

以下图表来自w3schools.com