ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

文字コードがShift_JISのページをブラウザで表示すると文字化けする

過去に作られたデータベースにデータを登録するプログラムを、XAMPPをインストールして動作させました。
動作するまでに起きた現象と対処について、以下の記事で書きました。
ajya.hatenablog.jp

文字化けが発生する

PHPのファイルはShift_JISで作成されていて、Webページにアクセスすると、Internet Explorer 11Mozilla FirefoxGoogle Chromeを使っても文字化けが発生しました。

PHPファイルのHTML部分のheadには、

<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

が記述されています。

これで文字化けする理由がわからず検索したところ、.htaccessファイルにAddTypeでファイルに対しての文字コード記述を追加するという記事がありました。
記事を参考に、

AddType "text/html; charset=Shift_JIS" .php

としてみましたが、文字化けは解消しませんでした。

f:id:AJYA:20170113073243j:plain
photo credit: US Department of State Anti-Corruption Conference in Afghanistan via photopin (license)

文字化けを解消する方法

文字化けの解消方法を求めてさらに検索すると、htmlが読み込まれるより前に、PHPのheader()関数で文字コードを出力するという記事がありました。
記事に書かれていたとおりに

<?php
header("Content-Type: text/html; charset=Shift_JIS");
?>

を追加したところ、文字化けが解消されました。

今後あらためて確認が必要

.htaccessへの記述の追加と、PHPのheader()関数の利用は、同じことをしているという認識でいましたが、結果が違いました。
今回はXAMPPをインストールして動作するようになるまでに時間がかかりすぎていて、文字化けが解消できた時点で、調べるのを止めています。

まだ利用する機会があるので、.htaccessファイルに記述する方法で対処できないものか、再度確認をする予定です。
今回記事を書くにあたり改めて検索したところ、.htaccessファイルに以下の内容を記述するという記事がありました。
これで文字化けが発生しなくなるのが、試してみます。

AddDefaultCharset shift-jis
AddType "text/html; charset=shift-jis" .html .php

php_value default_charset               Shift_JIS
php_value mbstring.language             Japanese
php_value mbstring.http_input           auto
php_value mbstring.http_output          SJIS
php_value mbstring.internal_encoding    Shift_JIS

最近のブラウザ

Mozilla Firefox以外は、表示しているページ文字コードの指定ができない、少なくともわかりやすいメニューに存在しない、ということに気がつきました。
文字化け自体に遭遇することがないので、必要ないのかもしれませんが、古いページでは発生する可能性があるので、選べたらいい、と今回改めて感じました。