在 Node.js 中,我使用querystring.stringify()
将对象编码为查询字符串以在 URL 中使用。有空格的值被编码为%20
.
我正在使用一个特别挑剔的 Web 服务,它只接受编码为 的空格,就像在RFC3986+
之前通常所做的那样。
有没有办法为查询字符串设置一个选项,以便将空格编码为+
?
目前我只是在做一个.replace()
替换所有实例的%20
with +
,但如果有一个选项我可以提前设置,这有点乏味。
在 Node.js 中,我使用querystring.stringify()
将对象编码为查询字符串以在 URL 中使用。有空格的值被编码为%20
.
我正在使用一个特别挑剔的 Web 服务,它只接受编码为 的空格,就像在RFC3986+
之前通常所做的那样。
有没有办法为查询字符串设置一个选项,以便将空格编码为+
?
目前我只是在做一个.replace()
替换所有实例的%20
with +
,但如果有一个选项我可以提前设置,这有点乏味。
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,因此您可以立即将其用于您的目的。
我想不出任何库默认会这样做,不幸的是,我会说你的实现可能是更有效的方法,因为任何其他选项可能会做你已经在做的事情,或者会使用较慢的非编译纯 JavaScript 代码。
要求 Web 服务提供商遵循 RFC 怎么样?
如果有人仍然面临这个问题,“qs”npm 包具有将空格编码为 + 的功能
qs.stringify({ a: 'b c' }, { format : 'RFC1738' })