gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 19:21:14 26 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/42435768/

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