gpt4 book ai didi

php - 终极表情符号编码方案

转载 作者:可可西里 更新时间:2023-11-01 06:35:47 24 4
gpt4 key购买 nike

这是我的环境:客户端 -> iOS 应用程序,服务器 ->PHP 和 MySQL。

从客户端到服务器的数据是通过 HTTP POST 完成的。

从服务器到客户端的数据是用json完成的。

我想添加对表情符号或一般任何 utf8mb4 字符的支持。我正在寻找在我的情况下处理此问题的正确方法。

我的问题如下:

  1. POST 是否允许 utf8mb4,或者我应该将客户端中的数据转换为纯 utf8?

  2. 如果我的数据库有排序规则和字符集 utf8mb4,这是否意味着我应该能够存储“原始”表情符号?

  3. 我应该尝试使用 utf8mb4 在数据库中工作,还是在 utf8 中工作和编码符号更安全/更好/更受支持?如果是这样,我应该使用哪种编码方法才能在 Objective-C 和 PHP(以及 future android 版本的 java)中完美运行?

现在我有带 utf8mb4 的数据库,但在尝试存储原始表情符号时出现错误。另一方面,我可以存储非 utf8 符号,例如 ¿á

当我在 PHP 中检索此符号时,我首先需要执行 SET CHARACTER SET utf8(如果我在 utf8mb4 中获取它们,则 json_decode 函数不起作用),然后这样的符号被编码(例如,¿ 被编码为 \u00bf)。

最佳答案

MySQL 的utf8 字符集实际上不是UTF-8,它是UTF-8 的一个子集,只支持基本平面(字符最多为U+FFFF)。大多数表情符号使用高于 U+FFFF 的代码点。 MySQL 的 utf8mb4实际的 UTF-8,它可以对所有这些代码点进行编码。在 MySQL 之外,没有“utf8mb4”之类的东西,只有 UTF-8。所以:

Does POST allow utf8mb4, or should I convert the data in the client to plain utf8?

同样,没有“utf8mb4”这样的东西。 HTTP POST 请求支持任何原始字节,如果您的客户端发送 UTF-8 编码数据就没问题。

If my DB has collation and character set utf8mb4, does it mean I should be able to store 'raw' emojis?

是的。

Should I try to work in the DB with utf8mb4 or is it safer/better/more supported to work in utf8 and encode symbols?

上帝啊,不,对所有神圣的东西都使用原始 UTF-8 (utf8mb4)。

When I retrieve this symbols in PHP I first need to execute SET CHARACTER SET utf8

好吧,这就是你的问题;通过 MySQL 的 utf8 字符集传输数据将丢弃 U+FFFF 以上的任何字符。通过 MySQL 一直使用 utf8mb4

if I get them in utf8mb4 the json_decode function doesn't work

您必须明确说明它的确切含义。 PHP 的 JSON 函数应该能够很好地处理任何 Unicode 代码点,只要它是有效的 UTF-8:

echo json_encode('😀');
"\ud83d\ude00"

echo json_decode('"\ud83d\ude00"');
😀

关于php - 终极表情符号编码方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34637105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com