今後は皆様の御助言などを基により良い解決策によって問題を解決したいと思っています。よろしくお願いします。
# サーバの OS はMoodleのコードを変更した当時は NetBSD でした (現在は、運用上の理由で CentOS を使っています)。
半角の空白を含むファイル名をダウンロードできない問題は,
http://www.suzuka-ct.ac.jp/mech/moodle/mod/wiki/view.php?id=320&page=Shirai007
奥村先生から教わった上記(Shirai007)方法で対策しました.これはいまでは本家の方でも対策済みですね.
あと,確かMoodleではファイル名に半角記号の使用を認めていなかったと思うのですが,その制限を緩和(Windowsでファイル名に使用不可な記号は除く)する改造も行なったはずです.ただ,いま探すとそれがどこだったのか分からなくなっています...
あ,ありました.これですね.
http://www.suzuka-ct.ac.jp/mech/moodle/mod/wiki/view.php?id=320&page=Shirai049
ファイル名を画面に表示するとベルの音が鳴るように...という訳ではありません.
単に,Windowsではファイル名に使用できない文字のみ _ に変換するようにコードを書いただけです.制御文字のことは考えていませんでした.キーボードから入力可能かどうかは分かりませんが,ファイル名を自動生成する際に誤って作成してしまう恐れは確かにありますね.消せなくなると怖いですが....OSが自動的に無視してくれることを(現段階では)期待しています.
時間が取れたら,実際に制御文字を含むファイル名が作成できるか,そしてそれを参照・削除可能かどうかを試してみようと思います.御指摘ありがとうございました!
#携帯電話から絵文字でファイル名を入力すると(携帯電話からであれば)絵文字でファイル名が表示されます.一瞬,”時代が変わった”感がありました.
Quickmailなどでファイルを添付した場合にマルチバイトのファイル名を使用すると添付ファイル名が化ける問題であれば,
このように修正しています.
メール本文中のURLっぽい部分に関してはURLエンコードするように修正する必要がありそうですね.もし手動でURLを埋め込むのであればブラウザのURL入力欄からコピーする際に(上記URLのように)変換してくれるようですが(IE7の場合).
確かMoodleからフォーラムへの新規投稿を定期的にメールで受け取る際のお話でしたよね.私は直接Moodleにアクセスしてしまうので現象を確認したことがありませんでした.なるほど,確かに気になりますね.時間ができたら試してみます.
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の場合).