If output has utf8 layer enabled, it makes only sense to mark it as such
to clients. Only available with PerlIO (as of Perl 5.8 afaict), but not
fatal (assume non-utf8) if it doesn't work.
Charset is only added at first read or change of the content-type value,
so it's not hardcoded to site defaults. Requires an extra object
variable unfortunately, but the only way to make it useful (no page
runtime accomodation wouldn't give much advantage).
+- Add charset to Content-Type header for UTF-8 output
- Test pod coverage
- %header values containing newlines will be sent as multiple fields
- All modules use warnings and contain a $VERSION
{
'content-type' => 'Content-Type',
'x-plp-version' => 'X-PLP-Version',
- }
+ },
+ 1 # = content-type untouched
], $_[0];
}
sub FETCH {
my ($self, $key) = @_;
+ if ($self->[2] and defined $self->[0]->{'Content-Type'}) {
+ my $utf8 = eval { grep {$_ eq "utf8"} PerlIO::get_layers(*STDOUT) };
+ $self->[0]->{'Content-Type'} .= '; charset=utf-8' if $utf8;
+ $self->[2] = 0;
+ }
$key =~ tr/_/-/;
return $self->[0]->{ $self->[1]->{lc $key} };
}
} else {
$self->[1]->{lc $key} = $key;
}
+ $self->[2] = 0 if $key eq 'Content-Type';
return ($self->[0]->{$key} = $value);
}