如何修复 PHP 中的表情符号打印问题?

我目前正在为聊天开发表情符号列表。因为有些表情符号有显示问题,所以我想在输出之前将表情符号转换为 SVG 等。我的列表中有很多这样的条目:


    $test = [

    [

        'id'    => 'couple-heart',

        'name'  => 'Couple with heart',

        'emoji' => '💑'

    ],

    [

        'id'    => 'grinning-face-big-eyes',

        'name'  => 'Grinning face with big eyes',

        'emoji' => '😃'

    ]

];


foreach ( $test as $item ) {

    echo $item['emoji'];

}

我的打印问题的一个例子是:


应该是:

http://img1.mukewang.com/635b301d0001d05400370040.jpg

也许我的文件编码有问题?目前是这样,UTF-8但这通常应该没问题。

谢谢你的帮助!


函数式编程
浏览 104回答 3
3回答

MMTTMM

根据官方 Unicode 数据文件:emoji-test.txt,☹ <U+2639> 是一个“不合格”(或“非完全合格”)表情符号序列,可能显示为文本或表情符号,具体取决于环境(操作系统、可用字体等)为了安全起见,请始终使用“完全合格”的表情符号序列;在这里,那就是:☹️ <U+2639, U+FE0F>

白衣非少年

也许尝试使用 javascript codePointAt() 进行转换并使用 javascript fromCodePoint() 在客户端显示它。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint

慕斯709654

正如之前的贡献者所指出的,您可能有一个不合格(即不完整)的表情符号。Unicode 标准为我们所知道的几乎每个字符定义了数字(也称为“代码点”),包括表情符号。字体的工作是显示与每个代码点对应的小图像(因此您将字符转换为图像的想法基本上是在重新发明轮子)。但是,某些表情符号由多个代码点表示。例如,显示的单个字符🇺🇸是一个字素,由两个码位组成:U+1F1FA 和 U+1F1F8。为了让事情变得更加混乱,一些表情符号有时表示为单个代码点,而有时它们由字素的组合表示(我认为“家庭”的表情符号属于这一类)。在任何情况下,如果您正在处理表情符号序列不完整的场景,那么不同的字体或操作系统或浏览器或应用程序 (???) 的行为可能会有所不同,并且有些可能会比其他的更优雅地失败。检查给定字符是否为有效代码点可能对您有所帮助。PHP 可以使用多字节字符串扩展进行编译——它提供了一些可能对此有所帮助的函数,例如mb_check_encoding和mb_ord(mb_ord不幸的是没有记录(!!!)但它会给你第一个字符的代码点给定的字符串)。PHP 可能没有最好的字符串支持,但它应该能够满足您的需求。希望这可以帮助!
打开App,查看更多内容
随时随地看视频慕课网APP