iPhoneから投稿したときに特殊文字以降が表示されない
WordPressと連携するiPhone・Androidアプリ(Titanium Mobile)を作成しているときに特殊文字(「かお」で変換して出てくる黄色のスマイリーなど)を投稿すると、それ以降の文章が表示されなかったので調べたときの覚書。
環境: CentOS 5.9, nginx 1.2.6, PHP 5.4.11, MySQL 5.5.32, WordPress 3.5
参考にしたのは下記サイト。
- MySQL に iOS の絵文字(4bytes UTF-8)が入った文字列を INSERT/UPDATE すると絵文字以降の文字がぶった切られる件 | をぶろぐ
- 鯖管のメモ帳: mysql に 4バイトutf8 の文字を入れたい
- 漢(オトコ)のコンピュータ道: MySQLコミュニティ騒然!MySQL 5.5.4が与えるインパクト。
データベースの文字コードをutf8mb4にする必要があるみたい。
一度全てのデータをSQL文でエクスポートして「CHARSET=utf8mb4」で登録し直す。
デフォルトで「utfmb4」になるようにmy.cnfを変更。
# vi /etc/my.cnf
[mysqld]
# charset
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci[mysql]
default-character-set=utf8mb4
確認
# mysql -p -u root
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
WordPressの設定ファイルwp-config.phpもそれに合わせて変更。
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', 'utf8mb4_general_ci');
iPhoneやAndroidで入力された絵文字をPCのWebブラウザでも表示したい場合は下記のようなライブラリが役に立つかもしれない。
- 携帯絵文字変換ライブラリ HTML_Emoji - libemoji.com
- emoji4unicode - Emoji for Unicode: Google Emoji private use mapping data and tools - Google Project Hosting
- Emoji for PHP
iPhone, Android, PC間で完璧に相互変換することは難しい。
機種依存文字は四角の豆腐のような文字になってしまう(「豆腐化」と呼ばれているらしい)ので、これを表示したくない場合はサーバー側で変換してあげる必要がありそう。
< Related Posts >