WebDAV 関係

English


IIJ 山田氏作成の mod_encoding-20011211a-hotfix.tar.gz
RedHat7.0 同梱の apache-1.3.12-25.src.rpm で mod_encoding を使用できるようにするための spec ファイルパッチ apache.spec.patch

Apache で WebDAV を実装している mod_dav モジュールは、現在日本語が通りません。正確に言うと文字コードをまったく意識せずただ単に open(2) をコールしているため、クライアントから ISO 8859-1 以外の文字コードが送られると、文字化けしてしまいます。

下記は Windows2000 でフォルダを作成した時の画面イメージです(Windows95/98/ME で IE5 の WebFolderを使う時も同様)。

フォルダの作成

新しいフォルダの作成

名前を入力しても、エラーになってしまう。

フォルダ名の変更に失敗

この場合、表示の更新を行うと、変更後の名前のフォルダと「新しいフォルダ」という文字列を SJIS で表現した名前のフォルダが作成されていることが確認できます。

文字化け

mod_dav は受けとったデータのヘッダに記載されている名前のファイルをそのまま open(2) しているだけです。そのため、Windows → mod_dav への送信データのヘッダのコードは SJIS のために、SJIS でのファイル(ディレクトリ)がそのまま作成されてしまいます。また mod_dav は送信時には格納されているままのコードで送信を行いますが、受信側は UTF-8 を期待しているため、ここで不整合が起きてしまいます。

Linux kernel は UTF-8 をそのまま扱うことができるため Apache を Linux 上で実行している場合は、ファイルを扱う前に iconv(3) で UTF-8 にコード変換してやれば、この問題を解決できます。

mod_encoding.c は、これを可能にするための Apache モジュールです。著作権保持者は IIJ の山田氏で、ここでは山田氏の了解を得て、二次配布を行っています。

通常のモジュールを利用できるようにする時と同様に、Apache の ./configure 実行時に "--add-module=mod_encoding.c" を追加してバイナリファイルを作成すれば準備は終わりです。あとは httpd.conf ファイルに下記のような行を追加して apache を再起動すれば、準備は完了です。

LoadModule encoding_module     modules/mod_encoding.so
<IfModule mod_encoding.c>
 EncodingEngine on
 SetServerEncoding UTF-8
 AddClientEncoding SJIS   "Microsoft .* DAV"
 AddClientEncoding SJIS   "xdwin9x/"
 AddClientEncoding EUC-JP "cadaver/"
</IfModule>


戻る