印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux 拡張子 html で PHP を動作させているときの文字化け問題が復活

拡張子 html で PHP を動作させるために .htaccess で設定をしていたのだが,OS を更新したタイミングで動作しなくなってしまった。そして,設定変更をすると文字化けするようになってしまった。

■ ■ ■

はじめに

拡張子を php ではなく,html のままで PHP を動作させるには,サイトのルートディレクトリに .htaccess を設置し,適切なディレクティブを記述してやればよい。以前,このサイトではその設定に付随した副作用で文字化けが発生してしまった (nlog(n): 文字化けを直すとPHPが動作しなくなる)。その問題は解決したのだが (nlog(n): 拡張子 html で PHP を動作させているときの文字化け問題が解決),このほど OS をアップグレードしたところ PHP が動作しなくなってしまった。そこで .htaccess の記述を変更したところ,またもや文字化けが発生するようになってしまったのである。

以前の動作環境

  • システムのデフォルト文字コード: EUC-JP
  • ブログサイトの文字コード: EUC-JP
  • OS: Vine Linux 3.2, Vine Linux 4.2
  • Web サーバ: (Apache 1.3.33, PHP 5.2.0), (Apache 2.2.3, PHP 5.2.9)

EUC-JP のファイルがあるルートディレクトリに設置した .htaccess

AddType application/x-httpd-php .html

UTF-8 のファイルがあるディレクトリの .htaccess

php_value default_charset utf-8
php_value mbstring.internal_encoding UTF-8

上の設定で動作していた。

今回の動作環境と

しかし,上の設定をそのままに,OS をアップグレードしたところ,PHP が html の拡張子で動作しなくなってしまった。動作環境は以下のとおり。

  • システムのデフォルト文字コード: UTF-8
  • ブログサイトの文字コード: EUC-JP
  • OS: Vine Linux 6.2
  • Web サーバ: Apache 2.2.27, PHP 5.5.17

そこで,以前学んだことをもとに,EUC-JP コンテンツを置いているディレクトリの .htaccess を次のように変更した。AddType がダメなら AddHandler とするのである。

AddHandler application/x-httpd-php .html

PHP は動作するようになったが,文字化けしてしまう。それならばと,次のように記述した。「1つの拡張子に対して2つの AddType は使えない」ので,一方を AddHandler,もう一方を AddType とするのである。

AddHandler application/x-httpd-php .html
AddType "text/html; charset=EUC-JP" .html

しかし,またしても文字化けしてしまう。

問題解決

試行錯誤し,問題は解決した。PHP を拡張子 html で動作させるのには AddHandler を使い,文字コードは php_value で指定するという方法である。Apache に PHP モジュールが導入されているときにだけ動作すればよいので,IfModule で囲んでおく。

EUC-JP のファイルがあるディレクトリの .htaccess は次の通り。

<IfModule mod_php5.c>
  AddHandler application/x-httpd-php .html
  php_value default_charset EUC-JP
  php_value mbstring.internal_encoding EUC-JP
</IfModule>

そして,UTF-8 のディレクトリでは

<IfModule mod_php5.c>
  AddHandler application/x-httpd-php .html
  php_value default_charset UTF-8
  php_value mbstring.internal_encoding UTF-8
</IfModule>

としておく。

サーバがどのような文字コードでコンテンツを送出しているのかを確認するには,ターミナルなら telnet でポート 80 を指定するのが一般的だが,Firefox なら Live HTTP headers アドオンが使える。

Posted by n at 2015-01-14 23:14 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?