如何在PHP 5.3中将表情符号转换为它们各自的HTML代码实体?

Pro*_*irl 5 php html-encode html-entities emoji php-5.3

我需要在PHP 5.3网站上将字符串中的表情符号(例如)转换为它们各自的HTML代码实体(例如😀)。

我需要这样做,以便将用户输入正确存储在旧脚本MySQL数据库中,以便以后在显示给用户时正确显示。尝试直接从用户输入中保存表情符号时,它们被错误地保存为?数据库中的表情符号。该旧脚本utf8mb4在MySQL 中不支持(此解决方案失败),并且所有尝试转换其数据库,表和列的尝试utf8mb4没有 解决了这个问题,所以我剩下唯一可以确认的解决方案是将用户输入的Emojis转换为字符串形式的HTML代码实体,以将这些实体按原样正确存储在数据库中,以便在检索时将它们正确显示为Emojis。因为现代浏览器会自动将这些表情符号实体转换为表情符号字符。

我也尝试过此解决方案,但仅在5.4及更高版本中它不适用于PHP 5.3。(我无法在此特定站点上升级到5.4,因为它所依赖的旧脚本仅在5.3中可用,并且在任何情况下都不能更改或升级。)

我也尝试过此解决方案该解决方案可在PHP 5.3中使用,但是您不能将其仅作为特定的Emoji字符串提供给它,因此即使在PHP 5.3中也无法解决我的问题。

只需要将Emojis转换为字符串即可,别无其他。(但是,如果不可能,那么我想我可以将其他HTML实体与之一起使用,例如&to &,但是我不希望这样)。

那么,如何在PHP 5.3中将字符串中的表情符号转换为它们各自的HTML代码实体,从而将类似的字符串this & that 转换为this & that 😎

Bar*_*ode 8

检测表情符号的代码绕过了 stackoverflow 的字符限制,所以这里有一个要点:

https://gist.github.com/BarryMode/432a7a1f9621e824c8a3a23084a50f60#file-htmlemoji-php

整个功能本质上就是

preg_replace_callback(pattern, callback, string);
Run Code Online (Sandbox Code Playgroud)

string是您想要更改为 html 实体的表情符号的输入。的pattern用途正则表达式来找到该串中的表情符号,然后每一个被送入callback,它是在转换从表情符号恰好HTML实体。

在创建这个函数时htmlemoji(),我结合了一些其他人使用过的不同代码段。这里有一些功劳:

回调使用此 stackoverflow 答案来构建每个实体。

该模式是直接从 GitHub 上的此源中提取的。

  • 经过进一步测试,您当前的解决方案仍未转换这些 **80** 表情符号:...请修复此问题,以便我可以接受您的解决方案。谢谢你。 (2认同)