文字化けは文字コードの不一致で起こります。文字をどの規則で数字に置き換えるかが、保存時と表示時で食い違うと、意味不明な記号の羅列になります。ここではどこで化けているかを切り分ける手順と、それぞれの対処を解説します。管理画面全体の使い方は使い方ピラーをご覧ください。
まず「どこで化けているか」を特定してください。サイトの表示、メール、データベース、アップロードしたファイル。それぞれ原因も対処も違います。日本語サイトの標準はUTF-8で、これに統一するのが基本の考え方です。データベースの文字化けだけは復旧が難しいため、バックアップからの復元を先に検討してください。
文字コードとは
文字化けを理解するには、この仕組みを知っておくと早くなります。
コンピュータは文字を数字として扱います。「あ」という文字をどの数字に対応させるか、そのルールが文字コードです。
日本語で使われる主な文字コードです。
| 文字コード | 特徴 |
|---|---|
| UTF-8 | 現在の標準。世界中の文字を扱える |
| Shift_JIS | 古いWindows環境で使われた |
| EUC-JP | 古いUNIX環境で使われた |
| ISO-2022-JP | メールで使われた |
保存したときのルールと、読むときのルールが違うと文字化けします。UTF-8で保存したファイルをShift_JISとして読むと、まったく別の文字に見えるわけです。
現在はUTF-8に統一するのが基本です。新しく作るものはすべてUTF-8にしてください。
どこで化けているかを特定する
- 1 サイトの表示が化けているかブラウザでサイトを開いて確認。一部だけか、全体かも見る
- 2 管理画面は化けていないかWordPressの管理画面で記事を開く。ここで正常なら表示側の問題
- 3 メールが化けているか送信・受信のどちらで化けるかを確認
- 4 アップロードしたファイルか最近アップロードしたファイルだけ化けていないか
- 5 いつから化けているか直前に何をしたか。移行、ファイルのアップロード、設定変更
ケース1:アップロードしたファイルが化ける
もっとも多く、もっとも直しやすいケースです。
原因
- ファイルの文字コードがUTF-8以外で保存されている
- FTPの転送モードが適切でない
対処
-
ファイルの文字コードを確認する
テキストエディタでファイルを開き、文字コードを確認してください。多くのエディタでは画面下部などに表示されます。 -
UTF-8(BOMなし)で保存し直す
エディタの「名前を付けて保存」や「エンコーディングを変更して保存」から、UTF-8を選んで保存します。
「BOMなし」を選んでください。BOM(Byte Order Mark)という目印が先頭に入ると、PHPファイルの場合に予期しない出力が発生し、エラーの原因になることがあります。エディタによっては「UTF-8」と「UTF-8 with BOM」が別項目になっています。
-
FTPの転送モードを確認する
FTPソフトには転送モード(アスキー/バイナリ/自動)の設定があります。バイナリまたは自動にしておくと、転送中にファイルが変換されて壊れるのを防げます。FTPの使い方はFTPの記事にまとめています。 -
再アップロードする
保存し直したファイルをアップロードして、表示を確認します。
ケース2:サイト全体が化ける
原因
- HTMLの文字コード宣言と実際の文字コードが違う
- .htaccess の文字コード設定
- テーマファイルの文字コード
対処
1. HTMLの文字コード宣言を確認する
HTMLファイルの先頭付近に、文字コードを宣言する記述があります。ここが実際のファイルの文字コードと一致しているかを確認してください。
-
WordPressの場合
テーマファイルの文字コードを確認します。自分で編集したファイルがShift_JISで保存されていると、その部分だけ、あるいは全体が化けることがあります。 -
.htaccess の設定を確認する
.htaccess で文字コードを指定している場合、それが原因のことがあります。
.htaccess を編集する前に、必ず元のファイルをダウンロードしてください。1文字の誤りでサイト全体が500エラーになります。対処は500エラーの記事にまとめています。
ケース3:メールが化ける
送信したメールが相手先で化ける
原因:メールソフトの送信文字コード設定、または機種依存文字の使用。
対処
- メールソフトの送信文字コードを確認する(UTF-8が無難)
- 機種依存文字を使わない。丸囲み数字、ローマ数字、単位記号などは環境によって化けます
- 相手の環境を確認する
受信したメールが化ける
原因:送信側の文字コード設定、またはメールソフトの表示設定。
対処
- メールソフトの文字コード設定を確認する
- Webメールで開いてみる。そちらで正常ならメールソフト側の問題です
- 送信者に確認する
メール設定全般はメール設定の記事にまとめています。
Webメールで開いて正常かどうかは、切り分けに有効です。Webメールで正常ならサーバーには問題がなく、メールソフトの設定の問題だと分かります。使い方はWebメールの記事へ。
ケース4:データベースの中身が化ける
これがもっとも厄介なケースです。
原因
- データベースの文字コード設定と、保存されたデータの文字コードが不一致
- 他社サーバーからの移行時にエクスポート・インポートの文字コードが揃っていなかった
対処
データベースの文字化けは、無理に直そうとしないでください。変換を繰り返すと、元に戻せない状態になることがあります。
まずバックアップからの復元を検討してください。エックスサーバーは14日分の自動バックアップを保持し、復元は無料です。化ける前の状態に戻せる可能性があります。
移行作業中に気づいた場合は、移行をやり直すほうが確実です。
- 移行元のデータが無事なことを確認する
- エクスポート時の文字コードを確認する(UTF-8)
- インポート先のデータベースの文字コードを確認する(UTF-8)
- やり直す
移行の手順はWordPressの引っ越し、サーバー移転の記事にまとめています。
ケース5:管理画面は正常だが表示だけ化ける
WordPressの管理画面では正しく表示されるのに、公開ページだけ化けるケースです。
原因:テーマファイルの文字コード、またはテンプレートに直接書いた日本語部分の文字コード。
対処:テーマファイルをUTF-8(BOMなし)で保存し直します。自分で編集したファイルが原因であることがほとんどです。
予防策
文字化けは予防できるトラブルです。
- すべてUTF-8で統一する。ファイル、データベース、メール設定
- エディタの既定の文字コードをUTF-8に設定する
- BOMなしを選ぶ。PHPファイルでは特に重要
- 機種依存文字を使わない。丸囲み数字、ローマ数字など
- 移行作業では文字コードを確認する。エクスポートとインポートの両方
- 編集前にバックアップを取る
症状別の早見表
| 症状 | 疑うところ | 最初に試すこと |
|---|---|---|
| アップロードしたファイルだけ化ける | ファイルの文字コード | UTF-8(BOMなし)で保存し直す |
| サイト全体が化ける | HTMLの宣言、テーマファイル | 文字コード宣言を確認 |
| 一部のページだけ化ける | そのページのファイル | 該当ファイルの文字コード |
| メールが化ける | メールソフトの設定 | Webメールで確認 |
| データベースが化ける | 移行時の文字コード | バックアップから復元 |
| 管理画面は正常、表示だけ化ける | テーマファイル | テーマの文字コード |
| 移行後に化けた | 移行時の設定 | 移行をやり直す |
まとめ
文字化けは文字コードの不一致で起こります。日本語サイトの標準はUTF-8なので、これに統一するのが基本です。
対処の前に「どこで化けているか」を特定してください。サイトの表示、メール、データベース、アップロードしたファイル。それぞれ原因も対処も違います。
アップロードしたファイルが化けるケースがもっとも多く、もっとも簡単に直せます。UTF-8(BOMなし)で保存し直してアップロードするだけです。
データベースの文字化けだけは、無理に直そうとしないでください。変換を繰り返すと元に戻せなくなります。バックアップからの復元を先に検討してください。エックスサーバーは14日分を保持し、復元は無料です。
予防としてはすべてUTF-8で統一することと、機種依存文字を使わないことの2つが効きます。
ファイル操作はFTPの記事、メール設定はメール設定の記事、移行作業はWordPressの引っ越しをご覧ください。