Php 7 - 将unicode字符串转换为unicode char #emoji

时间:2018-04-08 21:36:37

标签: php unicode emoji

我正在尝试在Php中创建一个从文本文件(json)获取消息并将某些部分转换为emojis的程序。

问题是,我昨天开始使用php,从那以后,我没有找到解决方案让它有效......

我有这段代码:

$message = $_GET["message"];
$emojis = array();
echo "{$message}\n";
preg_match("({[A-Z0-9]+})", $message, $emojis);
foreach($emojis as $key => $value) {
    echo "{$key} => {$value}\n";
    $emoji_string = "\\u".$value;
    $emoji_unicode = utf8_encode($emoji_string);
    $message = str_replace($value, $emoji_unicode, $message);
}
echo "{$message}\n";

所以我想要实现的是,通过使用在Regex101上创建的正则表达式(\\u{[A-Z0-9]+}),我想将一个简单的unicode文本转换为一个表情符号,以便显示一个美丽的信息哈哈

到目前为止,我知道\u{270B} #RaisedHand最后只有一个字符,这就是我尝试将字符串转换为简单字符的原因。我错了吗?但是,代码错误,因为我有"\\u{270B}"而不是"\u{270B}" ...

我现在真的不知道这个,有什么想法在你身边吗?

感谢您的帮助!

最高

编辑1

我尝试了这条消息:嘿嘿呀? {270B}

输出:

PHP
debug start
Hey what's up? {270B}
0 => {270B}
Hey what's up? \u{270B}
debug done

2 个答案:

答案 0 :(得分:1)

试试这个:我测试了它为我工作

$unicodeChar = '\u1000';
echo json_decode('"'.$unicodeChar.'"');

来自here

答案 1 :(得分:1)

问题是\u {270B}不存在。右边是\u270B。所以这样做:

<?php
$message = "message {270B}";
$emojis = array();
echo "{$message}\n";
preg_match("({[A-Z0-9]+})", $message, $emojis);
foreach($emojis as $key => $value) {
    echo "{$key} => {$value}\n";
    $emoji_string = "\u".substr ($value, 1, -1); //remove {}
    $emoji_unicode = json_decode('"'.$emoji_string.'"'); //decode
    $message = str_replace($value, $emoji_unicode,  $message);
}
echo "{$message}\n";

我测试了它并且它有效。输出为:message ✋