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

问题描述 投票:0回答:2

我正在尝试用 Php 制作一个小程序,从文本文件(json)获取消息并将某些部分转换为表情符号。

问题是,我昨天才开始使用 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}
#RaishedHand 最后只是一个字符,所以这就是为什么我尝试将字符串转换为简单的字符。我错了吗?但是,代码是错误的,因为我有
"\\u{270B}"
而不是
"\u{270B}"
...

我暂时对此一无所知,你有什么想法吗?

感谢您的帮助!

最大

编辑1

我尝试使用此消息:嘿,怎么了? {270B}

输出:

PHP
debug start
Hey what's up? {270B}
0 => {270B}
Hey what's up? \u{270B}
debug done
php unicode emoji
2个回答
1
投票

试试这个:我测试过它对我有用

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

这里


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 ✋

记住 还存在系列 2 个代码:

$txuni = '\uD83D\uDCA1';  # Lamp with 2 pairs

生成这个

lamp: 💡

© www.soinside.com 2019 - 2024. All rights reserved.