Смайлики iPhone вставляются в MySQL, но становятся пустым значением - PullRequest
10 голосов
/ 01 марта 2012

Мы разрабатываем приложение для iPhone, которое будет отправлять смайлики с iPhone на серверный PHP и вставлять их в таблицы MySQL. Я делаю работу на стороне сервера.

Но после успешного выполнения оператора вставки вставленное значение становится пустым.
То, что я мог бы вставить в поле (varchar) правильно, это текст, но однажды, включая смайлики,
можно вставить только текст, а смайлики будут вырезаны автоматически.

Кто-то дал мне совет по поводу установки типа поля в Блог, чтобы он мог хранить данные изображения.
Но вставленное значение не всегда включает регистр смайликов, а размер маленький.

* Я использую mysql_real_escape_string для вставки значения.

Ответы [ 2 ]

22 голосов
/ 01 марта 2012

Большинство смайликов iOS используют кодовые точки над базовой многоязычной плоскостью таблицы Unicode. Например, ? (УЛЫБАЮЩЕЕ ЛИЦО С ОТКРЫТЫМИ ГЛАЗАМИ И УЛЫБАЮЩИМИСЯ ГЛАЗАМИ) в U + 1F604.

OS X character viewer

Теперь смотрите http://dev.mysql.com/doc/refman/5.5/en/charset-unicode.html.

MySQL до версии 5.5 поддерживает только UTF-8 для BMP, который включает символы между U + 0000 и U + FFFF (т.е. только подмножество фактического UTF-8; MySQL utf8 не является реальным UTF-8). Он не может хранить символ в кодовой точке U + 1F604 или других подобных «старших символах». MySQL 5.5+ поддерживает utf8mb4 (фактический UTF-8), utf16 и utf32, которые способны кодировать эти символы. Если вы используете MySQL 5.5+, используйте один из этих наборов символов столбца и убедитесь, что вы используете ту же кодировку для кодирования соединения с / из PHP. Если вы используете MySQL <5.5, вам придется использовать тип столбца <code>BLOB. Этот тип хранит сырые байты, не заботясь о «символах» в нем. Недостатком является то, что вы не сможете эффективно искать или индексировать текст.

1 голос
/ 02 мая 2012

Некоторые из символов эмодзи работают со старыми неблокированными конфигурациями mysql, потому что они кодируются с использованием 3-байтовой кодовой точки, а mysql может хранить 3-байтовый символ.Если по какой-либо причине вы не можете обновить mysql или использовать BLOB-объекты, вы можете удалить 4-байтовые кодовые точки и оставить 3-байтовые.

Если ваш компьютер имеет возможности смайликов, вот список 3-байтовых символов смайликов iOS:

☺❤✨❕❔✊✌✋☝☀☔☁⛄⚡используй ♠ ♥ ♣ ♦ 〽☕⛪⛺⛲⛵✈⛽⚠♨1⃣2⃣3⃣4⃣5⃣6⃣7⃣8⃣9⃣0⃣ # ⃣⬆⬇⬅➡↗↖↘↙ ◀ ▶ ⏪⏩♿㊙㊗✳✴♈♉♊♋♌♍♎♏♐♑♒♓⛎⭕❌ © ® ™

...