不要在查询字符串中对URL进行编码的字符串化处理

8
有没有qs.stringify的选项,可以对URL进行编码?
$ node
> var qs = require("querystring");
undefined
> qs.stringify({"url": "http://domain.com"});
'url=http%3A%2F%2Fdomain.com'

我希望你能提供以下输出结果:
'url=http://domain.com'

2
这个问题很值得思考:为什么?那不是有效的查询字符串,所以它们被编码。 - Jonathan Lonowski
2
@JonathanLonowski 我使用了YouTube API,但是出现了错误。我以为问题在于URL的编码,但实际上不是这个原因...问题在于我忘记了response_type参数。 :-) 无论如何,谢谢! - Ionică Bizău
5个回答

6
再次晚回答,但是...
qs.stringify()有一个选项encode:false,它实际上禁用了URI编码。 Qs.stringify文档 你也可以在nodejs request/request模块中使用它:
request({
  url: 'http://url.domain'
  qs: {
    qs1: 'thisIsNotEncodedInTheRequest%20://асд'
  },
  qsStringifyOptions: {
    // encoding: false /** (OLD VERSION - I think is deprecated yet) */
    encode: false
  }
});

2
似乎已经改变,或者一直都是这样,从编码转为不编码。因此 encode: false - stevekrzysiak
https://github.com/ljharb/qs#stringifying - Terence Golla

6

虽然有些晚了,但对于下一个人,你可以这样做: querystring.unescape(myString)


1
请记住,这也会取消转义其他所有内容,因此 %20 将被渲染为 (一个字面上的空格)等等... - chmac

3

没有直接的方法可以实现,如果你在查询字符串中没有转义值,则使用查询字符串几乎没有任何好处。最好还是这样做:var q = 'url=http://domain.com'

编辑:从源代码来看,唯一的方法是更改(覆盖)querystring escape()函数的行为-虽然可能,但不是一个好主意。


1
这里是答案:
qs.stringify({url: "http://domain.com"}, { encodeURIComponent: uri => uri });

选项"encodeURIComponent: uri => uri"是用于禁用编码的。

1
它仍然无法与browserify一起使用 https://github.com/mike-spainhower/querystring/issues/4 - dy_

0

这对我有用

qs.stringify({url: "http://example.com"}, null, null, { encodeURIComponent: qs.unescape });

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