私はXサーバーというレンタルサーバーを借りて、その中にWordpressをインストールしてブログを運営しているのですが
そのWordpressで使われているMySQLデータベースは、文字セットが「utf8mb4」じゃなくて「utf8」なんですよね。
なのでWordpressで4バイトである絵文字(例えば😀←こういう絵文字)は保存できないはずなんです。
なのにですよ。
「絵文字付きの文章を投稿すると、なぜか絵文字が保存できてしまう」という現象が発生したんですよね。
これについて「どうなってんの・・?」と思って調べてみたら
どうやら以下のようなWordpressの仕様のせいらしい。
そこでWordPress 4.2では、 wp_insert_post関数内で投稿情報をデータベースへ保存する前段階で、「投稿タイトル」「内容」「抜粋」に含まれる絵文字を数値表現のHTMLエンティティに置き換えるようになっています。
つまり
- 保存するテーブルの文字セットが
utf8
の場合
→投稿に絵文字が含まれていたらHTMLエンティティ(数値文字参照や文字実体参照などとも言う)に変換して保存する
- 保存するテーブルの文字セットが
utf8mb4
の場合
→そのまま保存する
みたいな仕様になってるらしい。
HTMLエンティティというのは、例えば😀←この絵文字はUnicodeのコードポイントで表すとU+1F600だから、😀
ってHTML本文中に書けば😀が表示される・・みたいな仕組みのやつですね。
試しに、utf8
データベースなWordpressにてテキストエディタ(ビジュアルではなくテキスト)に😀と保存したあとにエディタを見てみると、😀の箇所が😀
と変換されるのが確認できました↓。
逆に、utf8mb4
なWordpressのテキストエディタ上で😀と打って保存しても、HTMLエンティティに変換されずに、😀のまま保存されているのが確認できました
- 確認したWordpressのバージョン:5.5
はぇ~Wordpressちゃん親切だなぁ・・。
ちなみに、utf8の場合に、HTMLエンティティに変換してくれるのは絵文字だけっぽいので、他の4バイト文字を保存しても消されちゃうみたいです。
例えば、𩸽(ホッケ)という漢字を本文中に使用してから保存しても、𩸽が本文中から削除されて保存されます。
ついでに言うと
- 4バイト絵文字(例:😀)
- 4バイト漢字(例:𩸽)
の両方を使っていると、𩸽の削除に巻き込まれて、😀のほうも削除されちゃうみたいです。よくわからんけどそういう仕様みたいです。
あと、エディタをテキスト→ビジュアルに切り替えると、&x1f600;
と書かれている部分が😀に変換され、再度ビジュアル→テキストに切り替えても😀のままみたいです。
おわり
コメント