【发布时间】:2019-04-12 17:54:20
【问题描述】:
我在 PHP 字符串变量中有以下表情符号
$emoji = "\u{1F9D1}\u{1F4AC}";
echo $emoji;
上面的代码将打印以下表情符号。
????????
我想将这些表情符号嵌入到电子邮件正文中。为此,我想将它们转换为 🧑💬 以便我可以将它们放在电子邮件正文中并且它们会正确显示。
我如何在 PHP 中做到这一点?
【问题讨论】:
我在 PHP 字符串变量中有以下表情符号
$emoji = "\u{1F9D1}\u{1F4AC}";
echo $emoji;
上面的代码将打印以下表情符号。
????????
我想将这些表情符号嵌入到电子邮件正文中。为此,我想将它们转换为 🧑💬 以便我可以将它们放在电子邮件正文中并且它们会正确显示。
我如何在 PHP 中做到这一点?
【问题讨论】:
$foo = preg_replace('#\\\u\{(.*?)\}#', '&#x$1;', $emoji);
\u 需要转义,因为它在正则表达式中具有特殊含义,并且由于反斜杠在 PHP 文本字面量中也具有特殊含义,所以我们这里需要三个。
{ 和 } 也有特殊含义,因此需要用一个反斜杠进行转义。
(.*?) 匹配所有内容(除了换行符),?让它变得不贪心。
我添加了一个 ;在替换的最后 - 浏览器在丢失时是容错的,但在技术上是 HTML 语法要求的。
以及“其他方向”,根据要求:
$emojihtml = '🧑💬';
$bar = preg_replace('~&#x(.*?);~', '\u{$1}', $emojihtml);
(我在这里使用~ 作为正则表达式分隔符,因为# 是我们想要匹配的一部分,节省了转义。)
【讨论】:
$ 作为分隔符,因为它可能会导致与用作字符串结尾的 $ 混淆。我会选择~ 或/。它确实有效,所以它不是一个错误,而是一个令人困惑的事情:)
~。 ($ 对于一些喜欢使用" 作为文本文字分隔符的人来说也可能有问题。不一定在这里,但是 PHP 将其作为更复杂表达式中变量开头的情况也很容易发生.)
if ($emoji == $bar) 总是为上述返回false。
\u{1F9D1}\u{1F4AC} 在这些替换之后,但 $emoji 确实包含 ?? - 这就是 data 之间的区别和代码。