使用Facebook / Twitter API Emojis编码问题

时间:2014-10-28 05:52:04

标签: php facebook-graph-api twitter emoji

我是PHP的新手,我在Facebook / Twitter API中遇到了emojis的编码问题

数据进来了,我看到emojis表示如下:\ u2026

在json_decode之后,emojis看起来像这样:â€|

在我的网站上,他们看起来像是。

我想妥善处理它们,以便在网站上看到它们,或者最糟糕的情况就是将它们剥离出来。我找到了一个js表情符号库,如果我能以正确的格式获得表情符号,它可以提供帮助。 https://github.com/iamcal/js-emoji

推特代码如下:

            $options = array( CURLOPT_HTTPHEADER => array("Authorization: $auth"),
                          //CURLOPT_POSTFIELDS => $postfields,
                          CURLOPT_HEADER => false,
                          CURLOPT_URL => $url,
                          CURLOPT_RETURNTRANSFER => true,
                          CURLOPT_SSL_VERIFYPEER => false);

            $feed = curl_init();
        curl_setopt_array($feed, $options);
        $json = curl_exec($feed);
        curl_close($feed);
        $twitter_data = json_decode($json, true);

Facebook代码如下所示:

        $requests = file_get_contents($request_url);
        $fb_response = json_decode($requests);
        $parseresponse = $fb_response->data;
        $fbpost = "";
        if (isset($parseresponse[0]->message))
        {
            $fbpost = $parseresponse[0]->message;
            $fbpost = str_replace("’", "'", $fbpost);
        }

检索API数据后,我将结果保存到mysql数据库,然后将mysql中的帖子显示到网站,以避免不必要的API调用。

如何让FB / Twitter API表情符号与https://github.com/iamcal/js-emoji一起使用?

3 个答案:

答案 0 :(得分:1)

您肯定遇到了编码问题。我建议你尝试以下方法:

mb_internal_encoding("UTF-8");
// content retrieval
$fb_response = json_decode($requests, JSON_UNESCAPED_UNICODE);

另外你想要确保你运行php版本> = 5.2.0。希望它有所帮助。

答案 1 :(得分:0)

PHP库中有一个名为Emoji for php的emojis,它将为您处理转换,它非常易于使用。您可以在此处下载副本:

http://code.iamcal.com/php/emoji/

答案 2 :(得分:0)

\ u2026不是表情符号。它是一个省略号,看起来像http://www.fileformat.info/info/unicode/char/2026/index.htm

然而,这绝对是一个多字节的角色。当它看起来像…时,某些地方的编码错误。

尝试找到它破裂的地方。也许在去数据库的路上(或在回来的路上?)?注意一切都是相同的unicode编码(我猜你使用的是UTF8?),与数据库的连接以及数据库表/字段本身。

如果您直接打印字符串(所以在将它们保存到数据库之前),它们看起来不错吗?如果没有,请检查您网站上是否查看多字节字符(例如echo "…";)?如果不是,您的页面可能根本不会呈现为UTF8?在这种情况下,请检查HTML和HTTP标头中的编码设置。

您可以通过执行以下操作来检查json_decode():

$json = json_decode('{"test":"\u2026"}');
var_dump($json->test === '…'); // should output boolean true

如果我在UTF8页面上输出省略号,如下所示,它看起来很好:

<html doctype>
<meta charset="utf-8">
…
</html>

但是,如果我将菜单中的编码更改为Western ISO-8859-1,我会得到您的…。它至少显示unicode字符串被解释为ISO-8859-1。你玩过这个设置吗?