Отправка смайликов в Facebook

Я использую Facebook API с их официальной библиотекой 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);
}

App :: нечистый:

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?

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 максимальная длина столбца или индексного ключа не изменяется в байтах. Следовательно, он меньше с точки зрения символов, поскольку максимальная длина символа теперь составляет четыре байта вместо трех.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]