CakePHP3で絵文字を表示したい
絵文字、表示したいですよね。
今はスマホ主体だと思うので、絵文字が使えるに越したことないです。
感情が伝わりやすいですからね。
そこで絵文字表示するちょっとした設定を見ていきます。
【自分の環境】
macOS Catalina
PHP7.4.2
CakePHP3.8
MAMP5.7
Apache2.2
MySQL5.7
デフォルトでは絵文字が無効になる
自分はMAMP環境でphpMyAdminを使っていたので、それで説明していきます。
CakePHP3のデフォルト設定では無効になってるんですね。
たぶん照合順序というものが「utf8_general_ci」とか「utf8_unicode_ci」とかになってます。
ざっくり言うと「utf8」系ではなく「utf8mb4」系にしましょう。
自分は「utf8mb4_general_ci」にしています。
問題点…ただ照合順序を変えるだけではダメ
照合順序を変えると、文字データの大きさが4/3倍になるらしいです。
だいたいデフォルトだとstring(varcher)は255文字だと思うんですけど、それでは後々DBをインポートできないなどの痛い目に遭います。
なので文字数を191にします。
なぜ191文字かと言うと、4バイトの文字が191文字分なので764バイト…これはMySQLの限界は最大767 バイトを下回るからだそうです。
自分の場合はユーザー名でもコメントでも何でも191より下の数にしました。
あとで整合性がなくなるので、phpMyAdminをいじるのではなく、マイグレーションでいじりましょう。
また人によってはMySQLの限界を変える方法を取る方もいます。
ですが自分は設定が上手くいかず、本番環境でインポートできなかったので、191文字に削減で行っています。
①app.phpでの設定
まずapp.phpですが、以下に書き換えます。
'Datasources' => [ 'default' => [ (中略) /* * You do not need to set this flag to use full utf-8 encoding (internal default since CakePHP 3.6). */ 'encoding' => 'utf8mb4', // コメントアウトする行 'timezone' => '+09:00', 'flags' => [], (中略)
コメントアウトする行と書きましたが、元々「'encoding' => 'utf8mb4'」となっているので、そう書きました。
コメントアウトしてあげると、データベースの設定がutf8mb4になるみたいです。
②ビューテンプレート(レイアウトテンプレート)を書き換え
残りはビューテンプレート(レイアウトテンプレート)を書き換えです。
いつものようにだと文字コードを「utf-8」にしていると思います。
それを「utf-8mb4」にしていきます。
以下はレイアウトテンプレートの一部です。
参照してください。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8mb4"> // この行が大事 <title><?= "サービス名" ?></title>
mb4を付け足すかんじですね。
これで表示ができます。
終わりに
以上となります。
絵文字表示はできればやりたいですよね。
ぜひやってみてください。
ありがとうございました。