Таким образом, у меня есть объект json из запроса twitter api. В исходной форме текст выглядит так:
"check out this emoji \ud83d\udc98"
Я потратил много времени на чтение unicode и его форматов, и мне удалось создать библиотеку с jon unicode в качестве таких клавиш:
$emoji_dictionary = array( '\ud83d\udd39'=> array( 'emoji-id'=> 'e-B76', 'codepoint'=> 'U+1F539', 'name'=> 'SMALL BLUE DIAMOND', 'twitter-id'=> '1f539' ), '\ud83d\ude3f'=> array( 'emoji-id'=> 'e-34D', 'codepoint'=> 'U+1F63F', 'name'=> 'CRYING CAT FACE', 'twitter-id'=> '1f63f' ), ... );
Итак, теперь я пытаюсь как ад оценить json unicode, который я получил из twitter в виде строки, которую я могу затем добавить к этой функции:
function get_src($str) { echo 'regex found:' . $str . '<br />'; return '<img class="twitter-emoji" src="https://abs.twimg.com/emoji/v1/72x72/' . $emoji_dictionary[$str]['twitter-id'] . '.png"/>'; }
Что возвращает изображение из твиттера этого emoji, но я не могу, по-видимому, preg_replace
json-данные в PHP. Иногда я получаю эту ошибку:
preg_replace(): Compilation failed: PCRE does not support \L, \l, \N{name}, \U, or \u
Мой preg_replace похож на это (обратите внимание, что это не работает):
$text = strval(json_encode($twitter_datum->text)); $pattern = "/\\\\u([a-f0-9]{4})/e"; $text = preg_replace($pattern, "get_src($1)", $text;
Этот шаблон захватывает «d83d» и «dc98» отдельно.
Я пытаюсь сделать невозможным? Я просто хочу получить 1f498
(из словаря) из "check out this emoji!! \ud83d\udc98"
Для тех, кто пытается сделать что-то подобное, вот что я узнал:
Строковые операции над чем-то json_encodeed
– плохая идея. Я делал это, потому что я не мог видеть выражение юникода, но мало ящиков, и поэтому и не знал, как их оценивать.
Emoji для PHP – БОЛЬШОЙ ресурс для такого рода вещей. Он может заменить любое появление unoode emoji с <span class="xxx'></span>
, где xxx
сопоставляется с спрайтом этого emoji. Он делает что-то похожее на то, что я пытался сделать, но для двух основных отличий :
<img>
с src, идущим на твиттер, это относится к <span>
со ссылкой на локальный png Теперь мой код выглядит так, и он работает нормально. Единственная проблема в том, что если / при добавлении новых emojis, они не будут распознаны этим скриптом. Возможно, в этот момент emojis будет немного более универсальным, с полной поддержкой браузера и т. Д. Вот что у меня есть: $ json
function twitter_chron() { $json = get_tweets(50); $twitter_data = json_decode($json); include(ABSPATH . 'wp-content/themes/custom/emoji/emoji.php'); foreach($twitter_data as $twitter_datum) { $id = $twitter_datum->id; if (property_exists($twitter_datum, 'retweeted_status')) { $text = 'RT: ' . $twitter_datum->retweeted_status->text; } else { $text = $twitter_datum->text; } $text = emoji_unified_to_html($text); $text = iconv("UTF-8", "ASCII//IGNORE", $text); insert_tweet($id, $text, $date); } }
emoji_unified_to_html($text)
– из emoji.php
. У меня есть дополнительные функции, которые я запускаю против тела твитов для ссылок, хэштегов и упоминаний, но я полагаю, что это не относится к этой конкретной проблеме emojis.
Надеюсь, это поможет кому-то.