Публикация смайликов в Facebook

Я использую API Facebook с их официальной библиотекой PHP. У меня есть код, который публикует некоторый контент в Facebook, однако смайлики не публикуются успешно. Это код:

public function postToFacebook() {
    $stripped_question = App::unclean($this->getQuestion());

    $question_id = $this->getId();

    $answer = $this->getAnswer();
    if ((!!$answer) && (strlen($answer) > 10)) {
        $answer = substr($answer, 0, strlen($answer) / 2)."...";
    }
    $uri = QM::$mainSiteName."question/question/qid/$question_id/";
    $desc = "";
    $caption = App::unclean($answer);
    $title = $stripped_question;
    $pic = QM::$mainSiteName . "images/facebook-attachment.png";
    $action_name = "Ask " . $_SESSION["username"] . " anything";
    $action_link = QM::$mainSiteName . $_SESSION["username"];
    $msg = "";

    App::CurrentUser()->postToFacebookWall($title, $uri, $desc, $msg, $pic, $caption, $action_name, $action_link);
}

Приложение:: нечисто:

public static function unclean($var) {
    return QM::filterText(stripslashes(trim($var)));
}

QM::filterText:

public static function filterText($text) {
    return str_replace(array('&lt;br /&gt;', '&lt;br/&gt;', '&lt;br&gt;'), '<br>', htmlspecialchars($text));
}

И, наконец, код для публикации в Facebook:

public function postToFacebookWall($title, $uri, $desc, $msg = null, $pic = null, $caption = null, $action_name = null, $action_link = null, $uid = 'me') {
    try {
        $data = array(
            'name' => $title,
            'link' => $uri,
            'description' => $desc            
        );

        if ($pic) {
            $data['picture'] = $pic;
        }

        if ($caption) {
            $data['caption'] = $caption;
        }

        if ($action_name) {
            $data['actions'] = json_encode(array('name' => $action_name, 'link' => $action_link));
        }

        Facebook\FacebookAccessor\FacebookAction::facebookActionFactory("post", array("url" => QM::$mainSiteName, "params" => $data));
    } catch (Exception $e) {
        return false;
    }

    return true;
}

Все работает нормально, кроме того, что смайлики не отображаются. Что следует изменить, если вопрос и/или ответ содержат смайлики, чтобы показать все, включая смайлики на Facebook?


person Lajos Arpad    schedule 16.09.2015    source источник


Ответы (1)


Эти шаги решили эту проблему для меня:

  1. Создайте резервную копию mysql :)
  2. Переключенный символ базы данных на utf8mb4
  3. Переключенная кодировка таблицы по умолчанию на utf8mb4
  4. Переключен символ текстового столбца на utf8mb4
  5. Проверьте бэкэнд, чтобы всегда работать в utf8

Пример:

ALTER DATABASE {database_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE {table_name} CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE {table_name} CHANGE {column_name} VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

И обратите внимание, при конвертации из utf8 в utf8mb4 максимальная длина столбца или ключа индекса не меняется в байтах. Следовательно, он меньше по символам, потому что максимальная длина символа теперь составляет четыре байта вместо трех.

person Sergey Krivov    schedule 16.09.2015
comment
Сергей, спасибо за ответ, но это уже было сделано. Смайлики сохраняются и хорошо отображаются на сайте. Проблема в том, что при создании поста в Facebook смайлики теряются при вводе. - person Lajos Arpad; 16.09.2015