使用Express的URL参数功能时,似乎会自动解码参数。也就是说,百分比编码实体被解析为其正常形式。 %20
替换为空格。
但是,加号+
不会替换为空格。这可能是因为Express在内部使用decodeURIComponent()
,也没有用空格替换加+
。简单示例代码:
app.get('/:sourceFile', function (req, res, next) {
console.log(req.params.sourceFile);
});
如果您请求/test%20test
,那么您将在控制台上获得test test
。如果您请求/test+test
,那么您将在控制台上获得test+test
。
有没有办法在Express 4中更改此操作模式?这是一个错误吗?
答案 0 :(得分:2)
您正尝试使用+来表示请求的“URI部分”中的空格。你不能这样做。加号仅在查询字符串中转换为空格。
这不是一个错误。在URI规范(第12/13页https://tools.ietf.org/html/rfc3986)中,加号是一个保留字符,并不打算将其翻译为空格。