首页 > 解决方案 > 将 \u 表情符号字符串转换为电子邮件正文的 utf-8

问题描述

我在 PHP 字符串变量中有以下表情符号

$emoji = "\u{1F9D1}\u{1F4AC}";
echo $emoji;

上面的代码将打印以下表情符号。


我想将这些表情符号嵌入到电子邮件正文中。为此,我想将它们转换为六以便我可以将它们放在电子邮件正文中并且它们将正确显示。

我如何在 PHP 中做到这一点?

标签: phpemoji

解决方案


$foo = preg_replace('#\\\u\{(.*?)\}#', '&#x$1;', $emoji);
  • \u 需要转义,因为它在正则表达式中具有特殊含义,并且由于反斜杠在 PHP 文本文字中也具有特殊含义,因此我们需要其中三个。

  • { 和 } 也有特殊含义,因此需要用一个反斜杠进行转义。

  • (.*?) 匹配所有内容(除了换行符),?使它变得不贪婪。

  • 我加了一个;在替换的最后 - 浏览器在丢失时是容错的,但在技术上它是 HTML 语法所要求的。


以及根据要求的“其他方向”:

$emojihtml = '🧑💬';

$bar = preg_replace('~&#x(.*?);~', '\u{$1}', $emojihtml);

(我~在这里使用了正则表达式分隔符,因为#它是我们想要匹配的一部分,节省了转义。)


推荐阅读