为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
函数式编程 2022-10-28 09:26:33
我目前正在为聊天开发表情符号列表。因为有些表情符号有显示问题,所以我想在输出之前将表情符号转换为 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'];}我的打印问题的一个例子是:☹应该是:也许我的文件编码有问题?目前是这样,UTF-8但这通常应该没问题。谢谢你的帮助!
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

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



查看完整回答
反对 回复 2022-10-28
?
白衣非少年

TA贡献1155条经验 获得超0个赞

也许尝试使用 javascript codePointAt() 进行转换并使用 javascript fromCodePoint() 在客户端显示它。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint


查看完整回答
反对 回复 2022-10-28
?
慕斯709654

TA贡献1840条经验 获得超5个赞

正如之前的贡献者所指出的,您可能有一个不合格(即不完整)的表情符号。Unicode 标准为我们所知道的几乎每个字符定义了数字(也称为“代码点”),包括表情符号。字体的工作是显示与每个代码点对应的小图像(因此您将字符转换为图像的想法基本上是在重新发明轮子)。

但是,某些表情符号由多个代码点表示。例如,显示的单个字符🇺🇸是一个字素,由两个码位组成:U+1F1FA 和 U+1F1F8。为了让事情变得更加混乱,一些表情符号有时表示为单个代码点,而有时它们由字素的组合表示(我认为“家庭”的表情符号属于这一类)。在任何情况下,如果您正在处理表情符号序列不完整的场景,那么不同的字体或操作系统或浏览器或应用程序 (???) 的行为可能会有所不同,并且有些可能会比其他的更优雅地失败。

检查给定字符是否为有效代码点可能对您有所帮助。PHP 可以使用多字节字符串扩展进行编译——它提供了一些可能对此有所帮助的函数,例如mb_check_encodingmb_ordmb_ord不幸的是没有记录(!!!)但它会给你第一个字符的代码点给定的字符串)。PHP 可能没有最好的字符串支持,但它应该能够满足您的需求。

希望这可以帮助!


查看完整回答
反对 回复 2022-10-28
  • 3 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信