添付ファイルが日本語ファイル名である場合、ダウンロード時に文字化けが発生します。
また、PHP5.4で動作させた場合、含まれている文字によっては "index" というファイル名でダウンロードされます。
attach.inc.php : 709 の open() で
709 case 'MSIE/default': 710 $filename = mb_convert_encoding($filename, 'SJIS', 'auto'); 711 break; ... 714 $filename = htmlsc($filename); 720 header('Content-Disposition: inline; filename="' . $filename . '"');
710行目で SJIS に変換しているが、これは古いIE(IE8以前)の動作にあわせた実装
714行目の htmlsc(htmlspecialchars)は、ここで使うのは適切でない。 SJISバイナリそのままhttp_outputに渡すのが元の意図と思われる。
ref.inc.php にも同じ問題がある。
2014年7月現在、多くのWebブラウザが RFC 6266 に対応しているので、RFC 6266 (Content-Disposition: filename*=utf-8''<rawurlencode_file_name>) を実装することで日本語を含むnon-ASCII文字を含むファイル名を正しくダウンロードできる。
また、旧実装(filename=)を残しておくことで古いブラウザに対しては今まで通りの動作となる。
diff --git a/plugin/attach.inc.php b/plugin/attach.inc.php index ce7f70e..355a428 100644 --- a/plugin/attach.inc.php +++ b/plugin/attach.inc.php @@ -711,13 +711,13 @@ EOD; break; } } - $filename = htmlsc($filename); + $utf8filename = mb_convert_encoding($filename, 'UTF-8', 'auto'); ini_set('default_charset', ''); mb_http_output('pass'); pkwk_common_headers(); - header('Content-Disposition: inline; filename="' . $filename . '"'); + header('Content-Disposition: inline; filename="' . $filename . '"; filename*=utf-8\'\'' . rawurlencode($utf8filename)); header('Content-Length: ' . $this->size); header('Content-Type: ' . $this->type);
URL: sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/b8dda6bf557989c0324c3002f242d997cd91cebd
diff --git a/plugin/ref.inc.php b/plugin/ref.inc.php index cb3fe32..f0095cf 100644 --- a/plugin/ref.inc.php +++ b/plugin/ref.inc.php @@ -420,12 +420,12 @@ function plugin_ref_action() break; } } - $file = htmlsc($filename); + $utf8filename = mb_convert_encoding($filename, 'UTF-8', 'auto'); $size = filesize($ref); // Output pkwk_common_headers(); - header('Content-Disposition: inline; filename="' . $filename . '"'); + header('Content-Disposition: inline; filename="' . $filename . '"; filename*=utf-8\'\'' . rawurlencode($utf8filename)); header('Content-Length: ' . $size); header('Content-Type: ' . $type); @readfile($ref);
URL: sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/b8dda6bf557989c0324c3002f242d997cd91cebd