#!/usr/bin/perl use strict; use Encode; use encoding qw(iso-2022-jp); use CGI qw(param); sub token ($) { my $s = shift; $s =~ s/[^0-9A-Za-z_+.-]//g; $s; } sub escape ($) { my $s = shift; $s =~ s/&/&/g; $s =~ s/%02X', ord $1!ge; $s; } sub check ($$$) { my ($name, $label, $defval) = @_; qq(); } sub select_options ($$$) { my ($name, $vals, $defval) = @_; my $r = qq(); $r; } my $filename = q(ファイル×1); my $charset = token param ('charset') || 'iso-8859-1'; my $charset_specify = param ('no-charset') ? 0 : 1; my $disposition = token param ('disposition') || 'inline'; my $encode = param ('encode'); if ($encode eq 'bare') { $filename = 'filename="' . encode ($charset, $filename) . '"'; } else { $filename = encode ($charset, $filename); $filename =~ s/([^0-9A-Za-z_+.-])/sprintf '%%%02X', ord $1/ge; $filename = 'filename*=' . $filename; } print < Example file File content
Content-Type: text/html@{[$charset?escape qq(; charset=$charset):'']}
Content-Disposition: @{[escape $disposition]}; @{[ascii_html escape $filename]}
Content Disposition type
@{[select_options 'disposition', [qw/inline attachment form-data file x-unknown-value/], $disposition]}
Charset
@{[select_options 'charset', [qw/iso-8859-1 us-ascii utf-8 iso-2022-jp euc-jp shift_jis/], $charset]}
@{[check 'no-charset', 'Don\'t use charset parameter', not $charset_specify]}
Encoding
@{[select_options 'encode', [qw/bare 2231 /], $encode]}
EOH