所以我从twitter api的查询中得到了json对象。在它的原始形式中,文本是这样的:
"check out this emoji \ud83d\udc98"
我花了很多时间阅读有关unicode及其格式的内容,并且我管理了一个将json 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'
),
...
);
所以现在我一直在努力评估我从twitter获得的json unicode作为一个字符串,然后我可以投入到这个函数中:
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"/>';
}
从表情符号的Twitter返回图像,但我似乎无法在PHP中正确preg_replace
json数据。我有时会收到此错误:
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&#39;和&#39; dc98&#39;分开。
我试图做的不可能吗?我只想从1f498
"check out this emoji!! \ud83d\udc98"
(来自词典)
答案 0 :(得分:3)
对于任何想要做这样事情的人来说,这就是我所学到的:
对json_encodeed
内容的字符串操作是一个坏主意。我这样做是因为我无法看到unicode表达式,但是很少有盒子代替&amp;因此,并不知道如何评估它们。
Emoji for PHP对于这类事情来说是一个很好的资源。它可以用<span class="xxx'></span>
替换任何unicode表情符号,其中xxx
映射到该表情符号的精灵。它做了类似于我试图做的事情,但有两个主要区别:
<img>
替换成src转到twitter,而是转到<span>
并引用本地png 我的代码现在看起来像这样,它工作正常。唯一的问题是,如果/当添加新的表情符号时,此脚本将无法识别它们。也许在那时,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
。我有另外的功能,我针对链接,主题标签&amp;提及,但我认为这与表情符号这一特定问题无关。
希望这有助于某人。