OSDN Git Service

BugTrack-wiki/347 : ダウンロードファイル名の文字化け対応
authorkgsoft <kgsoft@users.osdn.me>
Fri, 8 Dec 2017 08:34:18 +0000 (08:34 +0000)
committerkgsoft <kgsoft@users.osdn.me>
Fri, 8 Dec 2017 08:34:18 +0000 (08:34 +0000)
lib/Util.pm

index 4464446..598bdd9 100644 (file)
@@ -520,9 +520,12 @@ sub file_lock {
                my $mtime = (stat($lock))[9];
                rmdir($lock) if($mtime < time() - 60);
        }
+       #¥Ç¥£¥ì¥¯¥È¥ê̾¤ÎŤµ¼èÆÀ
+       my $to_long = 0;
+       $to_long = 1 if (length($lock) > 250);
        
        while(!mkdir($lock,0777)){
-               die "Lock is busy." if(--$retry <= 0);
+               die "Lock is busy".($to_long ? ' or long filename' : '')."." if(--$retry <= 0);
                sleep(1);
        }
 }
@@ -690,7 +693,10 @@ sub md5 {
 sub make_content_disposition {
        my ($filename, $disposition) = @_;
        my $ua = $ENV{"HTTP_USER_AGENT"};
-       my $encoded = ($ua =~ /MSIE/ ? &Jcode::convert($filename, 'sjis') : Jcode->new($filename)->mime_encode(''));
+       eval("use MIME::Base64;");
+       my $encoded = ( $ua =~ /MSIE|Trident/i   ? Jcode->new($filename)->sjis
+                     : $ua =~ /Chrome|Firefox/i ? "=?utf-8?B?".MIME::Base64::encode_base64(Jcode->new($filename)->utf8,'')."?="
+                     : Jcode->new($filename)->utf8 );
        return "Content-Disposition: $disposition;filename=\"".$encoded."\"\n\n";
 }