NodeJS Express对URL进行编码 - 如何解码

Ale*_*exD 24 escaping node.js express

我正在使用NodeJS和Express,当我在URL中使用外来字符时,它们会自动进行编码.

如何将其解码回原始字符串?

在调用NodeJS之前,我转义了字符.

所以字符串: ?????

%u05D0%u05D5%u05D1%u05DE%u05D4

整个网址现在看起来像: http://localhost:32323/?query=%u05D0%u05D5%u05D1%u05DE%u05D4

现在在我的NodeJS中,我得到了转义字符串%u05D0%u05D5%u05D1%u05DE%u05D4.

这是相关代码:

var url_parts = url.parse(req.url, true);
var params = url_parts.query;
var query = params.query; // '%u05D0%u05D5%u05D1%u05DE%u05D4'
Run Code Online (Sandbox Code Playgroud)

我试过urlquerystring库,但似乎没有什么适合我的情况.

querystring.unescape(query); // still '%u05D0%u05D5%u05D1%u05DE%u05D4'
Run Code Online (Sandbox Code Playgroud)

小智 45

更新16/03/18

escape并且unescape弃用.

使用:
encodeURIComponent('?????') // %D7%90%D7%95%D7%91%D7%9E%D7%94
decodeURIComponent('%D7%90%D7%95%D7%91%D7%9E%D7%94') // ?????

老答案

unescape('%u05D0%u05D5%u05D1%u05DE%u05D4')"?????"

尝试:

var querystring = unescape(query);

  • 这已被推荐多年了:http://cwestblog.com/2011/05/23/escape-unescape-deprecated/ (5认同)

小智 20

您应该使用decodeURI()encodeURI()编码/解码具有外来字符的URL.

用法:

var query = 'http://google.com';
query = encodeURI(query);
query = decodeURI(query); // http://google.com
Run Code Online (Sandbox Code Playgroud)

MDN参考:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI

  • 使用`encodeURIComponent`和`decodeURIComponent`.如果您没有需要编码的完整URI,这些将起作用. (7认同)