web-dev-qa-db-fra.com

Comment passez-vous une apostrophe via une URL?

J'utilise Node.js :

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

request(url, POST, ...)

Cela ne fonctionne pas! Et Facebook coupe mon texte ...

Code complet:

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 reçoit un message vierge sur le mur. Aucun texte ne s'affiche. Rien.

Lorsque je connecte mon URI, c'est ceci:

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

Évidemment, si vous regardez cette URL, vous voyez que l'apostrophe n'est pas codée correctement.

22
user847495

Je fais une chose similaire (également avec Node.js) et j'ai d'abord essayé d'utiliser la fonction intégrée escape () de JavaScript, mais cela n'a pas vraiment fonctionné.

Voici comment j'ai fini par faire fonctionner la recherche. Ce pourrait être juste un coup de chance:

 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")
4
Jamund Ferguson

A eu le même problème, encodeURIComponent n'a pas encodé de guillemet simple. L'astuce consiste à remplacer 'par% 27, après l'encodage:

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

De cette façon, trackArtistTitle sera correctement décodé sur le serveur, c'est-à-dire avec PHP en utilisant urldecode ().

17
nidalpres

Vous pouvez encoder la citation unique comme spécifié dans ce lien http://www.w3schools.com/TAGS/ref_urlencode.asp

3
Samir Adel

Je sais que cela ne répond pas à la question de l'OP, mais pour ceux qui viennent ici avec des questions liées à OData Query , notez que le caractère d'échappement est encore une seule citation.

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

Cela suppose que vous avez déjà effectué une encodeURIComponent(unescapedValue) sur votre chaîne

Source: https://stackoverflow.com/a/4483742/2831961

2
daniel.caspers