我正在编写一个将消息发布到Feed中的Facebook应用程序。当我尝试使用带有HTTP POST的图表API向我的Feed发送消息" Roy" 时,我会继续获得以下结果"我是罗伊" 。这是为什么?我使用PHP调用图形API,并使用urlencode()包装我的消息文本。
我想念什么?
这是我的PHP代码:
function POST_feeds($parameters)
{
//extract data from the post
extract($_POST);
//set POST variables
$url = 'https://graph.facebook.com/' . $parameters["facebookUserId"] . "/feed";
$fields = array(
'access_token' => $this->accessToken,
'message' => $parameters["message"]
);
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//execute post
$facebookResponse = curl_exec($ch);
//close connection
curl_close($ch);
$response = new Response();
$response->addItem($facebookResponse);
return response;
}
更新
上面的PHP函数是从以下XMLHttpRequest请求的POST参数中获取其参数:
var xhr = new XMLHttpRequest();
xhr.open("POST", webServiceUrl + "feeds", true);
var params = "facebookUserId=" + facebookUserId + "&message=" + message;
print(params);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
xhr.setRequestHeader("Content-length", params.length);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
print(xhr.responseText);
var responseObject = JSON.parse(xhr.responseText);
successCallback(responseObject);
} else {
failureCallback();
}
}
};
xhr.send(params);
似乎问题始于javascript代码(当我尝试使用我的PHP代码中的"'"字符硬编码某些消息时,一切正常)。
谢谢!
答案 0 :(得分:0)
你不应该对你的数据进行urlencoding,php facebook api会为你解决这个问题。
---原始答案
您必须在外部使用双引号"
才能解析转义字符。此外,如果您使用双外引号,则无需转义'
"I\'m Roy"
与
不同'I\'m Roy'
答案 1 :(得分:0)
试试这个:http://php.net/manual/en/function.urlencode.php?
如果你在字符串中有html标签,你可能希望将它与htmlentities()结合使用,如文档中所述......