【问题标题】:Node.js URL-encoding for pre-RFC3986 urls (using + vs %20)RFC3986 之前的 URL 的 Node.js URL 编码(使用 + 与 %20)
【发布时间】:2012-05-23 02:12:04
【问题描述】:

在 Node.js 中,我使用 querystring.stringify() 将对象编码为查询字符串,以便在 URL 中使用。包含空格的值被编码为%20

我正在使用一个特别挑剔的网络服务,它只接受编码为+ 的空格,就像在RFC3986 之前通常所做的那样。

有没有办法为查询字符串设置一个选项,以便将空格编码为+

目前我只是在做一个.replace() 来用+ 替换%20 的所有实例,但是如果我可以提前设置一个选项,这有点乏味。

【问题讨论】:

  • 我想不出任何库默认会这样做,不幸的是,我想说你的实现可能是更有效的方法。要求 Web 服务提供商遵循 RFC 怎么样?
  • 服务提供商正在处理它。没问题,我现在会坚持使用.replace()。如果您想发表您的评论作为答案,我会将其标记为该问题的答案。谢谢。

标签: node.js query-string urlencode url-encoding


【解决方案1】:

如果有人仍然面临这个问题,“qs”npm 包具有将空格编码为 + 的功能

qs.stringify({ a: 'b c' }, { format : 'RFC1738' })

【讨论】:

    【解决方案2】:

    我想不出任何库默认会这样做,不幸的是,我想说你的实现可能是更有效的方法,因为任何其他选项都可能会做你已经在做的事情,或将使用较慢的非编译纯 JavaScript 代码。

    要求 Web 服务提供商遵循 RFC 怎么样?

    【讨论】:

      【解决方案3】:

      https://github.com/kvz/phpjs 是一个node.js 包,提供了所有的php 功能。撰写本文时的 http_build_query 实现仅支持 urlencode(查询字符串包含 + 而不是空格),但希望很快将包含 enc_type 参数 / rawurlencode(空格的 %20)。

      http://php.net/http_build_query

      无论哪种方式,RFC1738 (+'s) 都是默认的 enc_type,因此您可以立即将其用于您的目的。

      【讨论】:

        猜你喜欢
        • 2018-08-10
        • 2010-12-10
        • 2013-10-05
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多