【问题标题】:Don't encode urls in querystring stringify不要在查询字符串 stringify 中编码 url
【发布时间】:2013-08-28 18:57:58
【问题描述】:

qs.stringify 是否有任何选项可以对网址进行编码?

$ node
> var qs = require("querystring");
undefined
> qs.stringify({"url": "http://domain.com"});
'url=http%3A%2F%2Fdomain.com'

我想要以下输出:

'url=http://domain.com'

【问题讨论】:

  • 这是一个很好的问题:为什么?这不是一个有效的查询字符串,这就是它们被编码的原因。
  • @JonathanLonowski 我使用 youtube api,但出现错误。我以为问题出在url的编码上,其实不是……问题是我忘记了response_type参数。 :-) 无论如何,谢谢!

标签: node.js query-string


【解决方案1】:

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

【讨论】:

  • 请记住,这也会取消转义其他所有内容,因此 %20 将被渲染为 ` `(文字空间)等等...
【解决方案2】:

又是迟到的答案,但是...
qs.stringify() 有选项 encode:false 实际上禁用了 URI 编码。

Qs.stringify documentation

你也可以在 nodejs request/request 模块中作为:

request({
  url: 'http://url.domain'
  qs: {
    qs1: 'thisIsNotEncodedInTheRequest%20://асд'
  },
  qsStringifyOptions: {
    // encoding: false /** (OLD VERSION - I think is deprecated yet) */
    encode: false
  }
});

【讨论】:

【解决方案3】:

不直接,不。虽然,如果您没有转义查询字符串中的值,那么使用查询字符串几乎没有任何好处。介意就做吧:var q = 'url=http://domain.com'

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

【讨论】:

    【解决方案4】:

    答案如下:

    qs.stringify({url: "http://domain.com"}, { encodeURIComponent: uri => uri });
    

    选项“encodeURIComponent: uri => uri”是禁用编码。

    【讨论】:

    【解决方案5】:

    这对我有用

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

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2012-06-02
      相关资源
      最近更新 更多