Node.js中的URL组件编码

Kli*_*Max 17 javascript urlencode url-encoding node.js percent-encoding

我想使用node.js发送http请求.我做:

http = require('http');

var options = {
    host: 'www.mainsms.ru',
    path: '/api/mainsms/message/send?project='+project+'&sender='+sender+'&message='+message+'&recipients='+from+'&sign='+sign
    };

    http.get(options, function(res) {
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));
    }).on('error', function(e) {
    console.log('ERROR: ' + e.message);
    });
Run Code Online (Sandbox Code Playgroud)

path这样的时候:

/api/mainsms/message/send?project=geoMessage&sender=gis&message=tester_response&recipients=79089145***&sign=2c4135e0f84d2c535846db17b1cec3c6
Run Code Online (Sandbox Code Playgroud)

这是工作.但是当message参数包含任何空格时,例如tester response所有空格.在控制台中我看到http使用这个网址:

  /api/mainsms/message/send?project=geoMessage&sender=gis&message=tester
Run Code Online (Sandbox Code Playgroud)

如何发送空间.或者我只是不能在网址中使用空格?

the*_*eye 42

您正在寻找的是URL组件编码.

path: '/api/mainsms/message/send?project=' + project + 
'&sender=' + sender + 
'&message=' + message +
'&recipients=' + from + 
'&sign=' + sign
Run Code Online (Sandbox Code Playgroud)

必须改为

path: '/api/mainsms/message/send?project=' + encodeURIComponent(project) +
'&sender=' + encodeURIComponent(sender) +
'&message=' + encodeURIComponent(message) + 
'&recipients='+encodeURIComponent(from) +
'&sign=' + encodeURIComponent(sign)
Run Code Online (Sandbox Code Playgroud)

注意:

有两个功能可用.encodeURIencodeURIComponent.您需要encodeURI在必须对整个URL进行编码encodeURIComponent时以及必须对查询字符串参数进行编码时使用,就像在这种情况下一样.请阅读此答案以获得广泛的解释.

  • 我不确定我理解.你是说我不应该因为它们不在Node.js文档中而建议像Array,String等函数吗? (3认同)
  • @JulienCROUZET 实际上`encodeURIComponent` 在Node.js 中也可用。它由 v8 提供。请检查 [this](http://ideone.com/q2Ddjp)。 (2认同)

Dav*_*orn 14

问题是Node.js. encodeURIcomponent未在Node.js中定义.请改用该querystring.escape()方法.

var qs = require('querystring');
qs.escape(stringToBeEscaped);
Run Code Online (Sandbox Code Playgroud)

  • 当问题最初发布时(2013 年),encodeURIComponent 在 Node.js 中不可用。即使在 2016 年,它在 Node.js 的许多打包版本中也不可用,尽管它在版本 6 中可用。我猜是时间问题吗? (2认同)