第52回: 文字コード — 文字化けを根絶するUTF-8統一戦略

章: 第6章: 実践運用と成長

「日本語が文字化けした」—— その原因は、文字コードの不統一がほとんどです。どこを直せば解決するか、すぐに特定できますか?

問題と解決策

文字化けは、データの入力・処理・出力のどこかで文字コードが混在するときに発生します。たとえば、HTMLがShift-JIS、PHPがUTF-8、MySQLがlatin1 という状態では、どこかで必ず化けます。

解決策はシステム全体をUTF-8に統一することです。HTML・PHP・MySQL・HTTPヘッダーすべてでUTF-8を宣言し、一貫させます。

文字コード設定箇所の比較

設定箇所 設定方法 重要度
PHPヘッダー出力 header('Content-Type: text/html; charset=UTF-8') ✅ 必須
HTMLメタタグ <meta charset="UTF-8"> ✅ 必須
MySQL接続 DSNに charset=utf8mb4 を指定 ✅ 必須
MySQLテーブル CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ✅ 必須
php.ini default_charset = UTF-8 △ 推奨

チェックポイント: MySQL接続のDSNに charset=utf8mb4 を指定していますか?utf8utf8mb4 は別物で、utf8mb4 が絵文字を含む現代の文字列に対応した正しい設定です。

コードサンプル


<?php
header('Content-Type: text/html; charset=UTF-8');
echo 'こんにちは';

まとめ & 次のステップ

  • 文字化けはUTF-8への全体統一で防げます
  • HTML・PHP・MySQL・HTTPヘッダーすべてでUTF-8を設定しましょう
  • MySQLはUTF-8ではなく utf8mb4 を使うのが正しい選択です
  • mb_* 関数(mb_strlen()mb_substr() 等)はマルチバイト文字列の処理に必須です

次回は 正規表現 — 複雑な入力チェックを短く書く強力な武器を学びます。

Related Articles