| mod_encodingを正しく設定できているかを確認します。
あらかじめ、他の原因がないことを確認します。例えば、PHPの記述されたファイル自体の文字コードや、指定されているエンコードが自体が正しいものかを確認します。PHPの設定はphp.iniで設定できますが、これ以外に.htaccessファイルでも設定の変更はできますし、httpd.confにも出力文字のエンコード指定があります。
この例では、PHP上で以下のような入力された値をそのまま表示するコードが文字化けしてしまうことに言及したものです。問題のある状態では、文字コードをphp.iniで設定しても、適切なエンコーディングで表示されません。
echo $_GET[keyword];
httpd.confや.htaccessで、mod_encodingに関する設定を行いますが、DAVが必要とされる場所以外では以下のようなIfModule設定を行いません。この設定に起因して文字化けが発生するときは、「EncodingEngine」を「on」から「off」に設定することで判断できます。「on」の状態のときは、外部から入力される値に影響を受けます。
EncodingEngine on
NormalizeUsername on
SetServerEncoding UTF-8
DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
AddClientEncoding "cadaver/" EUC-JP
この問題を回避するには、DAVが必要とされている場所以外で、上記のような設定が有効とならないように設定します。多くの方法が選択できると思いますが、例えば、バーチャルホストが導入されている環境では、以下のような設定を行うことで、設定したバーチャルホストのみで有効な設定となりますので、ここへはPHPコードを置かないようにします。
ServerName www.storage.test.domain
DocumentRoot /home/test/dav
Alias /dav /home/test/dav
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride None
DAV on
EncodingEngine on
NormalizeUsername on
SetServerEncoding UTF-8
DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
AddClientEncoding "cadaver/" EUC-JP
|