【问题标题】:How come I can't url encode this URL in node.js?为什么我不能在 node.js 中对这个 URL 进行 url 编码?
【发布时间】:2011-09-04 12:19:41
【问题描述】:
$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);

结果是这样的:

"http://google.com/?q=q=what's%20up"

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

【问题讨论】:

    标签: javascript url encoding node.js


    【解决方案1】:

    ' 允许在 URI 查询中使用纯格式。这里是对应的production rules for the URI query as per RFC 3986

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

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

    【讨论】:

      【解决方案2】:

      它被正确编码,如果你在谷歌搜索字段中手动输入相同的查询,你会得到这个地址:

      http://www.google.cz/#hl=cs&cp=8&gs_id=u&xhr=t&q=what's+up&pf=p&sclient=psy&site=&source=hp&pbx=1&oq=what's+u&aq=0&aqi=g5&aql=&gs_sm=&gs_upl=&bav=on.2,or.r_gc.r_pw.&fp=792ecf51920895b2&biw=1276&bih=683
      

      注意&q=what's+up& 部分

      encodeURIComponent 不是 Node.js 模块,而是标准 javascript 库的一部分

      https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURIComponent

      手动解决方法:

      $node
      querystring = require('querystring')
      var dict = { 'q': 'what\'s up' };
      var url = 'http://google.com/?q=' + querystring.stringify(dict);
      url = encodeURIComponent(url);
      url = url.replace(/'/g,"%27");
      

      【讨论】:

      • 好吧,我需要对它进行编码,因为当单引号出现在“名称”字段中时,Facebook 的 Graph API 会中断。
      • 如果您在 youtube 中搜索“What's up”,请注意它会对其进行编码。
      • Graph API breaks,怎么破?你有一些调试信息吗?你使用什么 API 调用?
      • 查看 youtube 的内容,我会在一分钟内将解决方法代码添加到我的答案中
      猜你喜欢
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      相关资源
      最近更新 更多