NodeJS Express 编码了 URL - 如何解码

51

我正在使用NodeJS和Express,当我在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'
4个回答

78

更新于 16/03/18

escapeunescape 已经被弃用

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


7
这个已经过时很多年了:http://cwestblog.com/2011/05/23/escape-unescape-deprecated/ (注意:这是对链接所指内容的简短翻译,没有进行额外的解释或添加其他内容) - Shadow The Spring Wizard
1
请使用 querystring.unescape(str) 代替。 - Rsh

27

1
我正在使用Express(如所述),并且我只有部分URL,其中仅包含参数。因此,decodeURI(query)返回一个“格式错误的URI”错误。我不知道在这种情况下该如何使用它。 - AlexD
9
使用 encodeURIComponentdecodeURIComponent。如果您不需要对完整的URI进行编码,则它们会起作用。 - Stephan

0

-3
#**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 

2
这个回答没有为其他回答增添任何内容,而且还不清楚和令人困惑。为什么所有的东西都格式化成代码?提到的澄清在哪里?它说会解释如何使用编码,但只有一个对 decodeURIComponent 的引用,甚至连如何使用它也没有真正展示。这浪费了人们的时间,甚至可能会让他们感到困惑。 - Lior
这是一个答案吗? - Asiri Hewage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接