WordPress で 4バイト文字を扱えるようにする。

さてさて、文字コード UTF-8 には、4バイトで一文字を表すものがあって、

例えば「?」(廻の異体字:U+2231E)だとか。

まぁ普段、頻繁に使う文字たちではないのですが、地名・人名だとか、古い文献を写すときなどに使用することもあるでしょう。

で、これらの文字をコピーしてきて、WordPressの投稿欄に貼りつけて、記事を保存 … とすると、その文字から後ろが消えてしまうのですな。

調べてみると、これは WordPress の問題というより、データベース・MySQL の問題です。チュートリアルに従って WordPress をインストールすると、『データベースの文字コードは "utf8" 』という設定になっていると思うのですが、ココが問題。

MySQL の文字コードを "utf8mb4" にしないと、4バイト文字を正しく扱ってくれない。

…のだそうだ。ただし "utf8mb4" が使えるのは MySQL 5.5 以降のバージョン。

MySQL のデータベース / テーブル / カラム の文字コードを変更する方法は、検索すれば素晴らしい解説がいろいろ見つかるのでそちらにお任せするとして、とりあえず行わねばならない作業は、

1. 4バイト文字を格納する可能性のあるカラムの文字コードを "utf8mb4" に変更。
*例えば投稿記事の本文だったら テーブル:wp_posts のカラム:post_content に保存されます。
2. 設定ファイル:wp-config.php の
/** データベースのテーブルを作成する際のデータベースのキャラクターセット */
define('DB_CHARSET', 'utf8');
を、
define('DB_CHARSET', 'utf8mb4');
に変更。

と、これで大丈夫な筈。utf8 から utf8mb4 への変更なので、文字コード自体は UTF-8 で変わっていない。つまり既に保存されている文字たちが、この文字コード変更によって文字化けすることは無いかと。

データベースの設定を弄るのは嫌だ、とか、そもそも今使っている MySQL のバージョンでは "utf8mb4" という設定が出来ない … というときは、実体参照で文字を埋め込めば大丈夫。

&#x に続いて、埋め込みたい文字の16進コード、最後に ;
「?」(廻の異体字:U+2231E)だったら、𢌞 と書けば → ?

いちいちコード番号を調べるのも面倒だけれど、これらの文字を使う頻度が多くないなら、この方法で充分。




カテゴリ: