这是我的环境:客户端 - > iOS应用程序,服务器 - > PHP和MySQL.
从客户端到服务器的数据是通过HTTP POST完成的.
服务器到客户端的数据是用json完成的.
我想添加对emojis或任何utf8mb4字符的支持.我正在寻找在我的场景下处理这个问题的正确方法.
我的问题如下:
POST是否允许utf8mb4,或者我应该将客户端中的数据转换为普通utf8?
如果我的数据库有整理和字符集utf8mb4,这是否意味着我应该能够存储'raw'emojis?
我应该尝试使用utf8mb4在数据库中工作,还是更安全/更好/更支持在utf8和编码符号中工作?如果是这样,我应该使用哪种编码方法,以便它在Objective-C和PHP(以及未来的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.所以:
POST是否允许utf8mb4,或者我应该将客户端中的数据转换为普通utf8?
再说一遍,没有"utf8mb4"这样的东西.HTTP POST请求支持任何原始字节,如果您的客户端发送UTF-8编码数据就没问题.
如果我的数据库有整理和字符集utf8mb4,这是否意味着我应该能够存储'raw'emojis?
是.
我应该尝试使用utf8mb4在数据库中工作,还是更安全/更好/更支持在utf8和编码符号中工作?
上帝不,使用原始的UTF-8(utf8mb4
)用于所有神圣的事物.
当我在PHP中检索此符号时,我首先需要执行
SET CHARACTER SET utf8
嗯,这是你的问题; 通过MySQL的utf8
字符集引导数据将丢弃U + FFFF以上的任何字符.一直使用utf8mb4
MySQL.
如果我在utf8mb4中获取它们,则json_decode函数不起作用
你必须明确指出这意味着什么.PHP的JSON函数应该能够正常处理任何Unicode代码点,只要它是有效的UTF-8:
echo json_encode(''); "\ud83d\ude00" echo json_decode('"\ud83d\ude00"');