我正在使用 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 开始,此命令已被弃用,您应该使用 decodeURI或decodeURIComponent相反。
使用这些命令的语法如下:
逃逸
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 编码引用
ASCII 控制字符编码引用
关于javascript - Node.js cookie 解析器返回编码字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41494956/