Как вы передаете апостроф через URL? - PullRequest
22 голосов
/ 04 сентября 2011

Я использую 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, вы увидите, что апостроф неправильно кодируется.

Ответы [ 4 ]

17 голосов
/ 26 сентября 2016

Была такая же проблема, 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 ().

4 голосов
/ 27 октября 2011

Я делаю аналогичную вещь (также с 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")
3 голосов
/ 04 сентября 2011

Вы можете закодировать одинарную кавычку, указанную в этой ссылке http://www.w3schools.com/TAGS/ref_urlencode.asp

2 голосов
/ 28 июля 2017

Я знаю, что это не относится к вопросу ОП, но для тех, кто приходит сюда с Запросом OData связанных вопросов, обратите внимание, что escape-символ - это еще одна одинарная кавычка .

unescapedValue.replace(/'/g, '\'\'')

Предполагается, что вы уже выполнили encodeURIComponent(unescapedValue) для своей строки

Источник: https://stackoverflow.com/a/4483742/2831961

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...