Проблемы с кодировкой с помощью Facebook / Twitter API Emojis

Я очень новичок в PHP, и у меня возникли проблемы с кодировкой эмодзи в API Facebook / Twitter.

Данные приходят, и я вижу смайлики, представленные так: \ u2026

после json_decode смайлики выглядят так:

и на моем сайте они выглядят как …

Я хотел бы обращаться с ними правильно, чтобы они могли быть видны на веб-сайте или в худшем случае просто удалить их. Я нашел библиотеку JS Emoji, которая может помочь, если я смогу получить смайлики в правильном формате. 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 ?

1

Решение

Вы определенно встретили проблему с кодировкой. Я бы предложил вам попробовать следующее:

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

Также вы можете убедиться, что вы используете php версию> = 5.2.0. Надеюсь, поможет.

1

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

Существует библиотека Emoji для PHP под названием Emoji для PHP, которая будет обрабатывать преобразование для вас, она очень проста в использовании. Вы можете скачать копию здесь:

http://code.iamcal.com/php/emoji/
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>

Однако если я изменю кодировку в меню на западную ISO-8859-1, я получу …, Это показывает, по крайней мере, что строка Unicode интерпретируется как ISO-8859-1. Вы играли с этим параметром?

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