为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
跃然一笑 2021-11-19 16:51:37
我有这个功能可以将表情符号转换为 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 格式。
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

Intl 扩展提供了处理 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++) {

    $char = mb_substr($var, $i, 1);

    $isEmoji = IntlChar::getBlockCode(IntlChar::ord($char)) == IntlChar::BLOCK_CODE_EMOTICONS;

    $out .= $isEmoji ? emoji_to_unicode($char) : $char;

}


echo $out;

这是您可以在其中找到所有块的预定义常量列表。


查看完整回答
反对 回复 2021-11-19
  • 1 回答
  • 0 关注
  • 238 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信