WordPress全盛のご時世にアレですが、Movable typeで絵文字を使いたいという相談を受けたので、対応方法をメモ。
「movable type 絵文字」とかでググると以下のような、絵文字画像+プラグインの対応方法がヒット。ただ少し古い情報で、ガラケー絵文字の仕様に近い。
- Six Apart 絵文字 | シックス・アパート – CMSソフトウェア、サービスを提供
- Movable Type でも絵文字アイコンを使う – ブログ | CMSプラットフォーム Movable Type ドキュメントサイト
- MT6 の TinyMCE で絵文字を使えるようにするプラグインを作りました – Numb.
今はスマホでUnicodeの絵文字が普及したこともあってか、PCのIMEでもUnicode絵文字が変換候補に出てくる。(例:「おに」>「?」)
今後はPCでもUnicode絵文字の利用は標準になるだろうということで、Unicode絵文字を使う方向で対応。
デフォルトの状態でUnicode絵文字は使えないのか?
まず、デフォルトの状態でUnicode絵文字を使うとどうなるのか?を検証。
記事編集画面でUnicode絵文字を入力すると「リッチテキスト」フォーマットでは絵文字がそのまま表示され、保存+出力したページにも絵文字が表示される場合があるが、再編集すると絵文字のコードが空になっていたり、それ以降のテキストが消失したりする。
ただし、©などの記号文字はこのような問題は発生しない。両者の実体参照コードを比較すると、不具合が発生するのは4バイト文字(utf8mb4)。
- © (©)< 3バイト(utf8)
- ?(👹)< 4バイト(utf8mb4)
以前のMySQLはBMP(基本多言語面)外の文字が使えなかったので、過去に作成したDBは「utf8mb4」が使える設定になっていないことが原因と予想。
必要な対応
ということで、4バイト対応に必要な対応は以下の2つ。
- ODBCドライバーのCharactor setの調整
- MySQLの該当カラムのCollation(文字コード+ソート順)の調整
1)ODBCドライバーのCharactor setの調整
MySQLのドライバは”mysql.pm”。
格納場所はMTインストールフォルダ内の「/lib/MT/ObjectDriver/Driver/DBD/mysql.pmmysql.pm」
これの「my %Charset =」に「'utf-8′ => ‘utf8mb4′,」を追加。
※元々ある「'utf-8' => ‘utf8'」は削除しない
my %Charset = ( 'utf-8' => 'utf8', 'utf-8' => 'utf8mb4', 'shift_jis' => 'sjis', 'shift-jis' => 'sjis', 'euc-jp' => 'ujis', #'iso-8859-1' => 'latin1' );
(最後の”euc-jp”の”,”を削除したほうが良い気もするが一旦無視)
2)MySQLの該当カラムのCollation調整
phpMyadminでDBにログインして、以下テーブルのカラムの「照合順序」を「utf8_general_ci」から「utf8mb4_general_ci」に変更。(全体設定を変えてもいいのかもしれないが、トラブルも面倒なので対象のみ変更)
- mt_entry
- entry_title(タイトル)
- entry_text(本文)
- entory_text_more(本文続き)
- mt_comment
- comment_text(コメント本文)
- comment_author(コメント投稿者名)
以上で、対応は完了?
備考
- Unicode絵文字が表示されない環境もある。
- 実際に表示される絵文字はOSによって微妙に違う。(この辺はガラケーと同じかな)
- 微妙にちがうどころか、全く違う場合もあるらしい。 > 【注意喚起?】ドコモからソフトバンクに音符の絵文字を送るとうんこに変換されてしまうらしい「クソだけに」「こんな変換困る」 – Togetter
- フォントサイズを変えると一部Android端末で表示されない場合がある。