# 機能:マルチバイトのファイル名をそれなりに処理するw
# 引数:パス分解後のファイル名(あ.jpg)
# 戻値:コンバート後のファイル名
# あ.jpg -> %e3%81%82.jpg (拡張子.JPG)
# あ.あ -> %e3%81%82%2e%e3%81%82 (拡張子なし)
sub convMbFilename{
my $filename = shift;
my $ext = $filename;
# 期待する命名規則であれば拡張子を取得する
if($ext =~ m/\.([^\.][0-9a-zA-Z]*)$/){
$ext = $1;
# コンバート前段階の準備として、引数の
# ファイル名に含まれている拡張子を除去
$filename =~ s/\.${ext}$//i;
}else{
# 命名規則に従っていないものは危険因子
# として、すべてを変換の対象にする
$ext = undef;
}
# 変換処理
$filename =~ s/([^\w ])/’%’.unpack(‘H2’, $1)/eg;
$filename =~ tr/ /+/;
# ファイル名がない場合は不明なファイル名とする
$filename = ‘Unknown’ unless $filename;
# 変換したファイル名とあれば拡張子を付加して返す
return $filename . ‘.’ . $ext;
}
コメント