はじめまして

実験してみました

- Tatsuya Shirai の投稿
返信数: 0

 fs_moodleでの要約(?)メールの一部です.


SAMPLE -> フォーラム -> 一般フォーラム ->
メールの添付ファイルに空白文字を使えない問題のテスト
---------------------------------------------------------------------
メールの添付ファイルに空白文字を使えない問題のテスト
2008年 10月  19日(日曜日) 20:15 - 白井 達也
の投稿
---------------------------------------------------------------------
 ファイル名に空白を含むとどうなるか?

添付ファイル 半角の空白を 含むファイル.txt:
http://www.suzuka-ct.ac.jp/mech/moodle/file.php/42/moddata/forum/161/1815/%E5%8D%8A%E8%A7%92%E3%81%AE%E7%A9%BA%E7%99%BD%E3%82%92%20%E5%90%AB%E3%82%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.txt
---------------------------------------------------------------------
これは ウェブサイト SAMPLE に投稿された記事のコピーです。


添付ファイルのファイル名と,その次の行に実際のURLを示していますね.
なお,URLがrawurlencodeされているのは,lib/filelib.phpのfunction get_file_url()に以下のような修正を加えているためです.

    if ($CFG->slasharguments) {
        $parts = explode('/', $path);
// (IE_Problem024): ここからコメントアウト
//
      $parts = array_map('rawurlencode', $parts);
// (IE_Problem024): ここから追加
        if (empty($noencodeurl)) $parts = array_map('rawurlencode', $parts);
// (IE_Problem024): ここまで追加
        $path  = implode('/', $parts);
        $ffurl = $url.'/'.$path;
        $separator = '?';
    } else {
// (IE_Problem023): IEで日本語ファイル名のファイルがダウンロードできない問題(2008/04/08)
// (IE_Problem023): ここからコメントアウト
//
      $path = rawurlencode('/'.$path);
// (IE_Problem023): ここから追加
        $parts = explode('/', $path);
// (IE_Problem024): ここから追加
        if (empty($noencodeurl)) $parts = array_map('rawurlencode', $parts);
// (IE_Problem024): ここまで追加
        $path  = '/'.implode('/', $parts);
// (IE_Problem023): ここまで追加
        $ffurl = $url.'?file='.$path;
        $separator = '&';
    }


 要約メールは,mod/forum/lib.phpのfunction forum_make_email_text()で作成され,添付ファイルに関する情報はfunction forum_print_attachments()の以下の部分(引き数$return が'text')です.

                if ($return == "html") {
                    $output .= "<a href=\"$ffurl\">$image</a> ";
                    $output .= "<a href=\"$ffurl\">$file</a><br />";

                } else if ($return == "text") {
                    $output .= "$strattachment $file:\n$ffurl\n";

                } else {

一応,ファイル名($file)とパス($ffurl)は併記されているようですので,パスはrawurlencodeされても大丈夫そうです.リンクをクリックするとブラウザが起動し,自動的にファイルのダウンロードが始まります.その際にきちんとファイル名はデコードされました(Firefox3の場合).