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.
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")
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 ().
Vous pouvez encoder la citation unique comme spécifié dans ce lien http://www.w3schools.com/TAGS/ref_urlencode.asp
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