我需要在 PHP 5.3 网站上将字符串中的表情符号(例如 😀
)转换为它们各自的 HTML 代码实体(例如 😀
)。
我需要这样做,以便用户输入能够正确存储在遗留脚本 MySQL 数据库中,以便稍后在向用户显示时正确显示。尝试直接从用户输入中保存表情符号时,它们被错误地保存为 ?
在其数据库中。此遗留脚本不支持 utf8mb4
在 MySQL 中(this solution 失败)以及将其数据库、表和列转换为 utf8mb4
的所有尝试没有解决了这个问题,所以我剩下的唯一一个我已经确认有效的解决方案是将用户输入的字符串中的表情符号转换为它们各自的 HTML 代码实体,以正确地将这些实体按原样存储在数据库中以便它们在检索时正确显示为表情符号,因为现代浏览器会自动将这些表情符号实体转换为表情符号字符。
我也试过this solution,但它在 PHP 5.3 中不起作用,仅在 5.4 及更高版本中起作用。 (我无法在此特定站点上升级到 5.4,因为它所依赖的遗留脚本仅适用于 5.3,并且在任何情况下都无法更改或升级。)
我也试过this solution ,它在 PHP 5.3 中工作,但你不能给它提供一个字符串,只能提供特定的表情符号,所以尽管在 PHP 5.3 中工作,它并没有解决我的问题。
我只需要转换字符串中的表情符号,没有别的。 (但是,如果那不可能,那么我想我可以接受其他用它转换的 HTML 实体,比如 &
到 &
,但我不希望这样。)
那么如何在 PHP 5.3 中将字符串中的表情符号转换为它们各自的 HTML 代码实体,以便像 this & that 😎
这样的字符串转换为 this & that 😎
?
最佳答案
检测表情符号的代码绕过 stackoverflow 的字符限制,所以这里有一个要点:
https://gist.github.com/BarryMode/432a7a1f9621e824c8a3a23084a50f60#file-htmlemoji-php
整个功能本质上就是
preg_replace_callback(pattern, callback, string);
string
是您想要将表情符号更改为 html 实体的输入。 模式
使用正则表达式在字符串中查找表情符号,然后将每个表情符号送入回调
,这是从表情符号到 html 实体的转换。
在创建此函数 htmlemoji()
时,我结合了其他人编写的几段不同的代码。这是一些学分:
The callback uses this stackoverflow answer to build each entity.
关于php - 如何在 PHP 5.3 中将表情符号转换为各自的 HTML 代码实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47039337/