I'm using Node.js:
var s = 'Who\'s that girl?';
var url = 'http://graph.facebook.com/?text=' + encodeURIComponent(s);
request(url, POST, ...)
This does not work! And Facebook cuts off my text...
Full code:
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 gets a blank post on the wall. No text shows. Nothing.
When I log my URI, it is this:
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
Obviously if you take a look at that URL, you see that the apostrophe is not being encoded correctly.
You can encode the single quote as specified in this link http://www.w3schools.com/TAGS/ref_urlencode.asp
I know this doesn't address the OP's question, but for those coming here with OData Query related questions, note that the escape character is yet another single quote.
This assumes you have already performed an
encodeURIComponent(unescapedValue)
on your stringSource: https://stackoverflow.com/a/4483742/2831961
Had the same problem, encodeURIComponent didn't encode single quote. The trick is to do the replacement of ' with %27, after the encoding:
This way, trackArtistTitle will be properly decoded on server i.e. with PHP using urldecode().
I'm doing a similar thing (also with Node.js) and first tried using JavaScript's built-in escape() function, but it didn't really work.
Here's how I ended up getting search to work. It might just be a fluke: