将表情符号从 php Web 应用程序传递到 Oracle db 和 mysql

Posted

技术标签:

【中文标题】将表情符号从 php Web 应用程序传递到 Oracle db 和 mysql【英文标题】:passing emojis from php web app into Oracle db and mysql 【发布时间】:2019-04-28 08:37:29 【问题描述】:

我们有一个发送短信的 php (codeigniter) 网络应用程序。我们连接的数据库是oracle。当一些客户试图通过我们的 web 应用程序发送表情符号时,表情符号在手机中的消息上显示效果不佳。我们可以在 sql plus 中看到表情符号,但它在 pl sql 上表现不佳。我们假设它与一些编码问题有关,但不能指出确切的问题。

流程是这样的

    PHP 插入 oracle。 从 oracle 到 mysql 的 Java。 插入mysql。 作为消息发送到手机。

例如:

这是它在 php 文本区域中的外观:

这是插入到 oracle 后使用 PL/SQL 的样子:

这是插入到 oracle 后使用 SQL PLUS 的样子:

这就是它在 mysql 中的样子:

还有在手机短信里:

mysql和oracle中的charset是utf8mb4

我们尝试将 php 中的查询更改为插入到 sms(messaage) 值中(?)我们尝试将列的类型从 varchar2 更改为 clob

编辑

我认为从 PHP 到 oracle 的连接设置得很好,你可以在这里看到:

【问题讨论】:

这些可能是unicode emoji 像这样:????????因此,您必须在任何地方都支持完整的 unicode 才能使其工作。是的,utf8mb4 应该可以解决问题……但不要忘记传输层。 由于您的数据库具有正确的字符集,因此请确保您的数据库连接具有正确的字符集 我用图片编辑了问题,显示了从 php 到 oracle 的连接设置。 对于 MySQL,我会选择 utf8mb4_unicode_ci 作为数据库排序规则。它确实one byte more。 Oracle 数据库中没有字符集utf8mb4。在 php 中设置 utf8 也不匹配。您使用哪种工具在 PL/SQL 中进行显示?你从SELECT DUMP(MESSAGE, 1016) from ... 得到什么?我觉得你在 SQLplus 中得到了正确的表情符号,因为知道如何在 SQLpus 中正确获取特殊字符的人也知道如何处理字符集,通常默认情况下它不起作用。 【参考方案1】:

我找到了解决方案。 需要将连接字符集从 php 更改为 oracle 为 'al32UTF8' insted of 'utf8'。 现在效果很好。谢谢

【讨论】:

以上是关于将表情符号从 php Web 应用程序传递到 Oracle db 和 mysql的主要内容,如果未能解决你的问题,请参考以下文章

从 iPhone 到 Python/Django 的表情符号

数据库mysql 如何保存表情符号 然后返回到前端

如何从字符串PHP的开头删除⭕️和♛表情符号?

将整个表情符号列表从字典添加到字符串数组

使用 Spring 应用程序中的休眠将表情符号 unicode 字符保存在 mysql 数据库中

将表情符号备忘单转换为安卓表情符号?