NodeJS Express 编码 URL - 如何解码

NodeJS Express encodes the URL - how to decode

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

如何解码回原来的字符串?

在调用 NodeJS 之前,我对字符进行了转义。

所以字符串:אובמה

变成%u05D0%u05D5%u05D1%u05DE%u05D4

整个 URL 现在看起来像: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'

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

querystring.unescape(query); // still '%u05D0%u05D5%u05D1%u05DE%u05D4'

更新 16/03/18

escapeunescapedeprecated

使用:
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);

你应该使用 decodeURI()encodeURI() 到 encode/decode 一个 URL 与外国字符。

用法:

var query = 'http://google.com';
query = encodeURI(query);
query = decodeURI(query); // http://google.com

参考 MDN:

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

#**update may-2020**
# how to use an encoder/decoder on node js
### I am writing my answer due to I have noisy data I spend 4 hour to fixed

data email   input = myemail@gmail.com
data URL input = /us/home

```
decodeURI function that only decodes a URL special character 

  email output =>myemail%40gmail.com 
  url output => %2Fus%2F

using decodeURIComponent 
  email output = > myemail@gmail.com
  url output => /us/
```
here some clarification where you can use decodeURI and  decodeURIComponent   a fucntion 

解码来自 URL

的查询参数

decodeURIComponent 不能直接用于解析来自 URL 的查询参数。它需要一些准备。

function decodeQueryParam(p) {
  return decodeURIComponent(p.replace(/\+/g, ' '));
}

console.log(decodeQueryParam('search+query%20%28correct%29'));
// 'search query (correct)'

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#decoding_query_parameters_from_a_url