IE11+Moodle 1.9ファイル名文字化け

IE11+Moodle 1.9ファイル名文字化け

- Haruhiko Okumura の投稿
返信数: 4
気がつかなかったのですが,Moodle 1.9のフォーラムの添付ファイル名が最近文字化けするようになったというご報告を受けて,私も試してみたところ,確かにIE11ではファイル名が化けます。Moodle 2.xなら大丈夫です。

もうMoodle 1.9はfade outさせるべきなのですが,まだ大部分の先生がMoodle 2.xに移行できていない現状を考えれば,何とかしたいところです。どなたか対応されたかたがおられましたら,ノウハウをご伝授ください。
Haruhiko Okumura への返信

Re: IE11+Moodle 1.9ファイル名文字化け

- udagawa mitsuru の投稿

宇田川です。
多分に憶測が入っているので違っていれば指摘頂ければと思います。

Moodle1.9系列は2バイト文字のファイル名を正しく扱えなかったと記憶しておりますので、三重大学版で2バイト文字を含むファイルをダウンロードした場合とさせていただきます。 ( http://oku.edu.mie-u.ac.jp/miemoodle/ )

lib/filelib.phpを見ると601行目付近に以下のような記述があります。

    // if user is using IE, urlencode the filename so that multibyte file name will show up correctly on popup (hacked by okumura and shirai)
    if (check_browser_version('MSIE')) {
        $t = rawurlencode($filename);
        if (strlen($t) > 21 * 3 * 3) {
            $filename = mb_convert_encoding($filename, "SJIS-WIN", "UTF-8");
            $filename = str_replace('#', '%23', $filename);
        } else {
            $filename = $t;
        }
    }

これでWebブラウザがIEの場合はファイル名をsjis-winにしているのですが、IE11ではUser AgentにMSIEの文字列を返さないように変更されているようです(未検証です)。 ( http://www.buildinsider.net/web/ie11preview/01 )
そのため、IE11も引き続きファイルダウンロード時にsjis-winで指定する必要があるのであれば(未検証です)、フィルタに引っかからずにダウンロード時に文字化けが起きるのだと思われます。

解決策としましてはブラウザの互換性機能を利用して古いUser Agentを送出するように利用者側で対応するか、当該部分を書き換えてIE11でもフィルタを通るようにするのが適当だと考えます。

udagawa mitsuru への返信

Re: IE11+Moodle 1.9ファイル名文字化け

- Haruhiko Okumura の投稿
ありがとうございます。

if (check_browser_version('MSIE') && !check_browser_version('MSIE',11)) {

駄目(ご指摘いただいた通りです。多謝)

lib/moodlelib.phpのcheck_browser_versionの定義に

case 'Trident':
if (preg_match("/Trident/i", $agent)) {
return true;
}
break;

を入れて

if (check_browser_version('MSIE') || check_browser_version('Trident')) {

駄目

で止まっています。
Haruhiko Okumura への返信

Re: IE11+Moodle 1.9ファイル名文字化け

- udagawa mitsuru の投稿

IE11の動作しているPCが用意できましたのでこちらの環境でも実際に確認してみました。三重大学版とは異なりますが、同様にIE用にカスタマイズしてあります。

まずお詫びいたします。前に書いたコードの処理は別の部分でした、本当はlib/filelib.php 723行目付近になります。
確認と対策は以下のように行いました。

  1. IE10環境で日本語ファイル名のファイルをアップロードしてダウンロード強制のリソースに指定する。
  2. IE11環境でファイルをダウンロードしようとするとファイル名が化ける。
  3. lib/filelib.phpの723行目付近の if(check_browser_version('MSIE')){} 部分をコメントアウトして、強制的にsjisに変換させるように変更。再度IE11環境でファイルのダウンロードを試みて問題が無いことを確認した後、コメントアウトを元に戻す。
  4. lib/moodlelib.phpのMSIEとしての判定部分に適当なコードを加えてIE11環境で問題なくダウンロードできることを確認。

奥村先生の投稿では4については別User Agent扱いにされていましたが、個人的にはMSIEとして問題ないと判断したため、case 'MSIE' 中に判別処理を入れています。 ( http://www.openspc2.org/userAgent/

評点平均: お役立ち度: ★★★★★★★ (2)