FrontPage  Index  Search  Changes  RSS  Login

Apacheと日本語ファイル名と%

Apacheで日本語のファイル名を取り扱うにはmod_encodingを入れればよい。mod_encodingはOSネイティブなエンコーディングでファイル名を送ってくるWebDAVクライアント用に作成されたモジュールだが副作用として日本語を含むURLを適切に処理できるようにしてくれたりする。

設定方法としては、httpd.confとかに

 <IfModule mod_encoding.c>
     EncodingEngine    on
     SetServerEncoding SJIS
     ClientEncodingの設定
 </IfModule>

と書けばよい。こうするとWebDAVに害が出そうな気がするのだが見た感じ問題ないようだ。

一方、mod_encodingを入れるとCGIパラメータとかも変換してしまうのでいろいろ害があるらしい。それへの対策パッチは提供されている。Apache1.3のパッチApache2のパッチ

別の問題として%を含むファイル名をうまく取り扱えないという問題もあるらしい。それも解決するパッチが提供されている。このパッチは上記のApache1.3パッチへの追加パッチ

Debianのlibapache-mod-encodingとlibapache2-mod-encodingではQUERY_STRINGパッチは適用されているが%を含むファイル名パッチが適用されていない。libapache-mod-encodingとlibapache2-mod-encodingに%を含むファイル名対応パッチを適用したDebianパッケージを以下の場所に置く。

sarge

 deb http://www.dzeta.jp/~junjis/apt/sarge/ ./

sid

 deb http://www.dzeta.jp/~junjis/apt/sid/ ./

各ファイルシステムで日本語のファイル名がどのエンコードで格納されているかを調べてみる。結果

WindowsローカルShift-JIS
MacローカルUTF-8
Windows共有(Windows)Shift-JIS
Windows共有(Samba)UTF-8(デフォルト)
WindowsからSCPで転送Shift-JIS
WebDAVUTF-8

ブラウザで日本語URLをアクセスした結果

ファイル名がShift_JISUTF-8
Firefox(Win)mod_encodingなしだとアクセス可mod_encodingがあるとアクセス可
IE(Win, URLをUTF-8で送信)mod_encodingのあるなしに関わらず不可mod_encodingのあるなしに関わらず可
IE(Win, URLをShift_JISで送信)mod_encodingがないとアクセス可mod_encodingがあるとアクセス可
Safari(Mac)mod_encodingのあるなしに関わらず不可mod_encodingのあるなしに関わらず可

結論、ファイル名はUTF-8エンコーディングにしておけ

#真の結論、日本語のファイル名を使うな

Last modified:2007/10/31 05:16:57
Keyword(s):
References:[FrontPage]