如何通过 URL 传递撇号?

新手上路,请多包涵

我正在使用 Node.js

 var s = 'Who\'s that girl?';
var url = 'http://graph.facebook.com/?text=' + encodeURIComponent(s);

request(url, POST, ...)

这是行不通的! Facebook 切断了我的文字…

完整代码:

 function postToFacebook(fbid, access_token, data, next){
    var uri = 'https://graph.facebook.com/'+String(fbid)+'/feed?access_token='+access_token;
    var uri += '&' + querystring.stringify(data);
    request({
        'method':'POST',
        'uri': uri,
    },function(err,response,body){
        next();
    });
};

app.get('/test',function(req,res){
    var d = {
        'name':'Who\'s that girl?',
        'link': 'http://example.com',
        'caption': 'some caption...',
        'description': 'some description...',
        'picture': 'http://i.imgur.com/CmlrM.png',
    };
    postToFacebook(req.user.fb.id, req.user.fb.accessToken, d);
    res.send('done');
});

Facebook 在墙上贴了一张空白的帖子。没有文字显示。没有什么。

当我记录我的 URI 时,它是这样的:

 https://graph.facebook.com/1290502368/feed?access_token=2067022539347370|d7ae6f314515c918732eab36.1-1230602668|GtOJ-pi3ZBatd41tPvrHb0OIYyk&name=Who's%20that%20girl%3F&link=http%3A%2F%2Fexample.com&caption=some%20caption...&description=some%20description...&picture=http%3A%2F%2Fi.imgur.com%2FCmlrM.png

显然,如果您查看该 URL,您会发现撇号没有被正确编码。

原文由 user847495 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 308
2 个回答

我正在做类似的事情(也使用 Node.js)并首先尝试使用 JavaScript 的内置 escape() 函数,但它并没有真正起作用。

这是我最终让搜索工作的方式。这可能只是侥幸:

  function doMySearch(showTitle) {
     showTitle = escapeShowTitle(showTitle)
     var url = "http://graph.facebook.com/search?q=" + showTitle + "&type=page"
     doSomethingWith(url)
}

function escapeShowTitle(title) {
    title = title.replace(/'/g, "")
    title = escape(title)
    return title
}

doMySearch("America's Funniest home Videos")

原文由 Jamund Ferguson 发布,翻译遵循 CC BY-SA 3.0 许可协议

有同样的问题, encodeURIComponent 没有编码单引号。诀窍是在编码 用 %27 替换 ‘:

 var trackArtistTitle = encodeURIComponent("Johnny Vegas - Who's Ready Fo'r Ice Cre'am")
// result: Johnny%20Vegas%20-%20Who's%20Ready%20Fo'r%20Ice%20Cre'am
trackArtistTitle = trackArtistTitle.replace(/'/g, '%27')
// result: Johnny%20Vegas%20-%20Who%27s%20Ready%20Fo%27r%20Ice%20Cre%27am

这样,trackArtistTitle 将在服务器上正确解码,即使用 PHP 使用 urldecode()。

原文由 nidalpres 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题