iPhoneから投稿したときに特殊文字以降が表示されない

compose_to_wordpress_from_devidesWordPressと連携するiPhone・Androidアプリ(Titanium Mobile)を作成しているときに特殊文字(「かお」で変換して出てくる黄色のスマイリーなど)を投稿すると、それ以降の文章が表示されなかったので調べたときの覚書。

環境: CentOS 5.9, nginx 1.2.6, PHP 5.4.11, MySQL 5.5.32, WordPress 3.5

参考にしたのは下記サイト。

データベースの文字コードを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ブラウザでも表示したい場合は下記のようなライブラリが役に立つかもしれない。

iPhone, Android, PC間で完璧に相互変換することは難しい。

機種依存文字は四角の豆腐のような文字になってしまう(「豆腐化」と呼ばれているらしい)ので、これを表示したくない場合はサーバー側で変換してあげる必要がありそう。

 

< Related Posts >