クライアントのWebブラウザがIEの場合のみ発生する現象です.
当方のeWikiはかなり標準に対して修正を加えていますので,もしかしたら当方だけの問題かも知れません.できましたら検証して頂けると助かります.また,IEのバージョンは日本版IE8でのみ確認しています.海外用IE,他のバージョンでは挙動が異なるかも知れません.
現象: eWiki上で文字列"attachment"(半角アルファベット.大文字小文字関係なし)を含むページを新規作成し,そのページを編集しようとしてもページがダウンロードされてしまう(添付の図を参照).ブラウザがIEの場合のみ発生し,Firefox3.5では発生しなかった.Firefox3.5で当該ページを編集し,IEにより閲覧しようとしても同じくページがダウンロードされてしまう.
つまりeWikiのなんらかのページの編集画面で [attachment] と記述し,このページを保存すると,(まだattachmentというページが存在しないならば) attachment? と表示されます.末尾の?をクリックするとattachmentというページ名のWikiページの編集画面に遷移するはずが,このページ(attachment.html)をIEは画面に描画せずにダウンロードしてしまいます.
ページ名にattachmentを含んでいれば,[aaaaaaaattachmenttttttttt]でも本現象は発生します.[aTTachment]のように大文字と小文字を混在させても発生します.
原因: おおよそ判明しています.多分,IEのバグでしょう.ページを閲覧あるいは編集するには,mod/wiki/view.phpが呼ばれます.さらにmod/wiki/ewiki/ewiki.phpがインクルードされます.この中にあるfunction ewiki_http_headers()でブラウザに送出するヘッダーを生成しています.
if (!empty($data)) {
if ($uu = @$data["id"]) @header('Content-Disposition: inline; filename="' . urlencode($uu) . '.html"');
if ($uu = @$data["version"]) @header('Content-Version: ' . $uu);
if ($uu = @$data["lastmodified"]) @header('Last-Modified: ' . gmstrftime($ewiki_t["C"]["DATE"], $uu));
}
青字で示したContent-DispositionのヘッダーをIEが正しく解釈していないものと思われます.inline展開かattachmentでダウンロードかの判断を行うのに,Content-Disposition:の右側の文字列全体を検索して"attachment"が含まれているか,inlineが含まれているか(後者は現象を検証していませんので,attachmentが含まれているかだけでTrue or not Trueと判断している疑惑もあります)で挙動を切り替えている可能性が大です.filename=の後にダブルクオートで括っている部分を検索から除外していないのではないか,と.
対策: いまのところ二つ考えられます.全て,クライアントのブラウザがIEと判断した時のみの対策です.
- Content-Dispositionのヘッダー自体を送出しない: 一応,ページの編集/閲覧は可能になりましたが,副作用(添付ファイルのダウンロードなど)が発生する恐れがあります.
- filename(つまり$uu)に"attachment"が含まれる場合は"_ttachment"などに置換してしまう.
日本語文字化けの問題とは異なりますので,urlencode(), rawurlencode()では乗り切れませんねぇ.これからUsing moodleの方も検索してみようと思います.