Я очень новичок в 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 ?
Вы определенно встретили проблему с кодировкой. Я бы предложил вам попробовать следующее:
mb_internal_encoding("UTF-8");
// content retrieval
$fb_response = json_decode($requests, JSON_UNESCAPED_UNICODE);
Также вы можете убедиться, что вы используете php версию> = 5.2.0. Надеюсь, поможет.
Существует библиотека Emoji для PHP под названием Emoji для PHP, которая будет обрабатывать преобразование для вас, она очень проста в использовании. Вы можете скачать копию здесь:
http://code.iamcal.com/php/emoji/
\ 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. Вы играли с этим параметром?