表情符号 (Unicode) 到 UTF-8 & 符号哈希 (?) 编码

Emoji (Unicode) to UTF-8 ampersand hash (?) encoding

为了保持与现有 PHP 解决方案的兼容性,我需要

输入: // emoji character, 输出:😁

我相信这是 'ampersand hash' 编码(我不确定它叫什么。如果我能找到任何资源来解释我是如何得到这种格式的,我会被诅咒的......或者为什么这种编码适用于...)

我可以通过 URL 编码 Unicode 获取字节...

<?php  print urlencode(""); /* Output: %F0%9F%98%81 */  ?>

...我可以使用正则表达式将其转换为我需要的格式...但我不喜欢这种解决方案。它非常 hacky 并且很容易意外编码未编码的字符串...

<?php
  $enc = urlencode("");
  print $enc; // %F0%9F%98%81
  $find = '/(%)([0-9a-fA-F][0-9a-fA-F])/i';
  $replacement = '&#x;';
  print preg_replace($find,$replacement,$enc);
?>

结果:&#xF0;&#x9F;&#x98;&#x81

有没有更好的方法?

这种编码称为什么,我如何获得它(通过 PHP)?

非常感谢!

编辑: 事实证明,这种做法终究是不合适的。 urlencode 将所有空格转换为 + 个字符。必须有一个正确的方法才能达到这种格式?

&#xF0;&#x9F;&#x98;&#x81; 是 "html entities";它代表 4 个十六进制字节 F09F9891,这是该表情符号的 UTF-8 编码。我怀疑你是想安抚 HTML,而不是 PHP?

http://unicode.scarfboy.com/?s=%F0%9F%98%81 -- 转到 "string stuff" 页面的一部分,看看如何为 HTML、utf8、python、javascript 编码等

PHP 中的一种方式是:

echo bin2hex('');   // f09f9881

然后将其分成 2 个十六进制数字组。