PHP 将表情符号保留在 unicode 中,但也将文本保留为纯文本

我有这个功能可以将表情符号转换为 unicode,但它也将文本转换为十六进制。


如何只转换表情符号并将文本保留为纯文本字符串?


function emoji_to_unicode($emoji) {

   $emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');

   $unicode = strtoupper(preg_replace("/^[0]{3}/","U+",bin2hex($emoji)));

   return $unicode;

}


$var = ("😀x😀text here");

$out = '';

for ($i = 0; $i < mb_strlen($var); $i++) {

    $out .= emoji_to_unicode(mb_substr($var, $i, 1));

}

echo "$out\n";

所以


$var = ("😀x😀text here");


返回给我:


U+1F600U+00078U+1F600U+00074U+00065U+00078U+00074U+00020U+00068U+00065U+00072U+00065


但我需要像这样返回:


U+1F600xU+1F600text here

我需要将文本保留为纯文本,但也需要将表情符号保留为 unicode 格式。


跃然一笑
浏览 239回答 1
1回答

阿晨1998

Intl 扩展提供了处理 unicode代码点和块的函数,这些函数将允许您确定当前字符是否是表情符号。function emoji_to_unicode($emoji) {&nbsp; &nbsp;$emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');&nbsp; &nbsp;$unicode = strtoupper(preg_replace("/^[0]{3}/","U+",bin2hex($emoji)));&nbsp; &nbsp;return $unicode;}$var = ("😀x😀text here");$out = '';for ($i = 0; $i < mb_strlen($var); $i++) {&nbsp; &nbsp; $char = mb_substr($var, $i, 1);&nbsp; &nbsp; $isEmoji = IntlChar::getBlockCode(IntlChar::ord($char)) == IntlChar::BLOCK_CODE_EMOTICONS;&nbsp; &nbsp; $out .= $isEmoji ? emoji_to_unicode($char) : $char;}echo $out;这是您可以在其中找到所有块的预定义常量列表。
打开App,查看更多内容
随时随地看视频慕课网APP