我在我的数据库中的消息中存储了像“\ u1F603”这样的代码,现在我需要在我的网页上显示相应的表情符号。
如何使用PHP将\ u1F603转换为\ xF0 \ x9F \ x98 \ x83以在网页中显示表情符号图标?
答案 0 :(得分:3)
您不需要将表情符号字符代码转换为UTF-8序列,您只需使用原始的21位Unicode值作为HTML中的数字字符引用,如下所示:😃
呈现为:?。
维基百科文章"Unicode and HTML"解释说:
为了解决遗留编码的限制,HTML的设计使得可以使用numeric character reference来表示HTML文档中整个Unicode的字符:一系列明确拼写的字符out表示正在表示的字符的Unicode代码点。字符引用的格式为
&#
N;
,其中 N 是Unicode代码点的十进制数或十六进制数,在这种情况下,它必须以x
为前缀。组成数字字符引用的字符在批准在Internet上使用的每个编码中都是通用的。例如,像U + 5408这样对应于特定中文字符的Unicode代码点必须转换为十进制数字,前面加
&#
后跟;
,就像这样:合
,产生这个:合。
因此,如果在PHP代码中有一个包含'\u1F603'
的字符串,那么您可以使用preg_replace创建相应的HTML字符串,如下例所示:
$text = "This is fun \\u1F603!"; // this has just one backslash, it had to be escaped
echo "Database has: $text<br>";
$html = preg_replace("/\\\\u([0-9A-F]{2,5})/i", "&#x$1;", $text);
echo "Browser shows: $html<br>";
输出:
数据库有:这很有趣\ u1F603!
浏览器显示:这很有趣?!
请注意,如果在您的数据中,您也会使用文字\u
表示法来表示较低范围的Unicode字符,即使用2到4位的十六进制数字,您必须确保下一个用户的字符也不是十六进制数字,因为它会导致\u
转义序列停止的位置的错误解释。在这种情况下,我建议总是在数据中用零填充这些十六进制数字,这样它们总是长5位数。
要确保您的浏览器使用正确的字符编码,请执行以下操作:
head
部分中指定UTF-8字符编码:<meta charset="utf-8">
答案 1 :(得分:0)
地狱大家, 经过多次尝试,我可以找到解决方案。
我用户下面的代码: https://github.com/BriquzStudio/php-emoji
data:"em"
这个对我来说很好!! :)Below is my reslut