为什么我不能在node.js中对此URL进行url编码?

TIM*_*MEX 2 javascript url encoding node.js

$node
querystring = require('querystring')
var dict = { 'q': 'what\'s up' };
var url = 'http://google.com/?q=' + querystring.stringify(dict);
url = encodeURIComponent(url);
console.log(url);
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

"http://google.com/?q=q=what's%20up"
Run Code Online (Sandbox Code Playgroud)

请注意单引号是如何编码不正确的.node.js模块有问题吗?

Gum*_*mbo 12

'是允许在普通的URI的查询.以下是根据RFC 3986的URI查询的相应生产规则:

query         = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded   = "%" HEXDIG HEXDIG
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="
Run Code Online (Sandbox Code Playgroud)

如您所见,sub-delims包含一个普通的'.所以结果是有效的.