【问题标题】:Encoding trouble with Facebook/Twitter API EmojisFacebook/Twitter API 表情符号的编码问题
【发布时间】:2014-12-23 11:10:01
【问题描述】:

我是 PHP 新手,在 Facebook/Twitter API 中遇到了一些表情符号编码问题

数据进来了,我看到表情符号是这样表示的:\u2026

在 json_decode 之后,表情符号看起来像这样:......

在我的网站上,它们看起来像……。

我想妥善处理它们,以便它们可以在网站上看到,或者在最坏的情况下将它们去掉。我找到了一个 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 一起使用?

【问题讨论】:

    标签: php facebook-graph-api twitter emoji


    【解决方案1】:

    您肯定遇到了编码问题。我建议您尝试以下操作:

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

    您还想确保您运行的是 php 版本 >= 5.2.0。希望对您有所帮助。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我试过用这个。我对数据运行了 emoji_google_to_unified 方法,但没有任何改变。我在 json_decode 之前和之后都试过了。没有运气。
      【解决方案3】:

      \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。你玩过这个设置吗?

      【讨论】:

      • 我已经尝试在整个过程中打印字符串。它们以 \u2026 的形式出现,然后在执行 json.decode 时更改为 ...。
      • @mga911 奇怪。我在答案中添加了两个测试用例。你如何检查你的输出?我猜是在浏览器中?
      猜你喜欢
      • 2019-05-26
      • 2013-12-01
      • 2012-03-28
      • 1970-01-01
      • 2012-09-29
      • 2012-10-19
      • 2019-02-26
      • 2021-04-11
      相关资源
      最近更新 更多