コードの解説 – 関数部分
改行やカンマが出てきた時のフィールドの変換を行っているのが以下の関数です。
sub escape4txt{
my $str = shift;
defined $str or return '';
return $str unless ($str =~ /[,"\r\n\t]/);
$str =~ s/"/""/g;
$str =~ s/\r\n/\n/g;
return "\"$str\"";
}
my $str = shift;
defined $str or return '';
return $str unless ($str =~ /[,"\r\n\t]/);
$str =~ s/"/""/g;
$str =~ s/\r\n/\n/g;
return "\"$str\"";
}
順に解説します。
まず値を受けます。
my $str = shift;
変換の必要が無ければそのまま引数を返します。
(文字列が定義されていない場合と、特殊文字が無い場合。)
defined $str or return '';
return $str unless ($str =~ /[,"\r\n\t]/);
return $str unless ($str =~ /[,"\r\n\t]/);
クオートがあればクオートはエスケープします。
$str =~ s/"/""/g;
値中の CR+LF は LF に変更します。フォーム送信の際の標準の「改行コード」は CR+LF なので、CGI で送信された値を受ける場合、この変換が必要です。
$str =~ s/\r\n/\n/g;
変換済の値をクオートで括って返します。
return "\"$str\"";