« ここで一句 | Home | メニュー泥棒 »

Feb 222018

Movable TypeでUnicode絵文字🐮🐯🐵

Wordpress全盛のご時世にアレですが、Movable typeで絵文字を使いたいという相談を受けたので、対応方法をメモ。

「movable type 絵文字」とかでググると以下のような、絵文字画像+プラグインの対応方法がヒット。ただ少し古い情報で、ガラケー絵文字の仕様に近い。

今はスマホでUnicodeの絵文字が普及したこともあってか、PCのIMEでもUnicode絵文字が変換候補に出てくる。(例:「おに」>「👹」)

今後はPCでもUnicode絵文字の利用は標準になるだろうということで、Unicode絵文字を使う方向で対応。

デフォルトの状態でUnicode絵文字は使えないのか?

まず、デフォルトの状態でUnicode絵文字を使うとどうなるのか?を検証。

記事編集画面でUnicode絵文字を入力すると「リッチテキスト」フォーマットでは絵文字がそのまま表示され、保存+出力したページにも絵文字が表示される場合があるが、再編集すると絵文字のコードが空になっていたり、それ以降のテキストが消失したりする。

ただし、©などの記号文字はこのような問題は発生しない。両者の実体参照コードを比較すると、不具合が発生するのは4バイト文字(utf8mb4)。

  • © (©ï¼‰ï¼œã€€3バイト(utf8)
  • 👹(👹)< 4バイト(utf8mb4)

以前のMySQLはBMP(基本多言語面)外の文字が使えなかったので、過去に作成したDBは「utf8mb4」が使える設定になっていないことが原因と予想。

必要な対応

ということで、4バイト対応に必要な対応は以下の2つ。

  1. ODBCドライバーのCharactor setの調整
  2. 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(コメント投稿者名)

以上で、対応は完了😝

備考

参考

Leave a comment

Search and Archives