NodeJS Express encodes the URL - how to decode

2019-02-06 07:38发布

问题:

I'm using NodeJS with Express, and when I use foreign characters in the URL, they automatically get encoded.

How do I decode it back to the original string?

Before calling NodeJS, I escape characters.

So the string: אובמה

Becomes %u05D0%u05D5%u05D1%u05DE%u05D4

The entire URL now looks like: http://localhost:32323/?query=%u05D0%u05D5%u05D1%u05DE%u05D4

Now in my NodeJS, I get the escaped string %u05D0%u05D5%u05D1%u05DE%u05D4.

This is the relevant code:

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

I've tried url and querystring libraries but nothing seems to fit my case.

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

回答1:

Update 16/03/18

escape and unescape are deprecated.

Use:
encodeURIComponent('אובמה') // %D7%90%D7%95%D7%91%D7%9E%D7%94
decodeURIComponent('%D7%90%D7%95%D7%91%D7%9E%D7%94') // אובמה

Old answer

unescape('%u05D0%u05D5%u05D1%u05DE%u05D4') gives "אובמה"

Try:

var querystring = unescape(query);



回答2:

You should use decodeURI() and encodeURI() to encode/decode a URL with foreign characters.

Usage:

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

Reference on MDN:

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