add charset to default content-type header if STDOUT is in UTF-8
[perl/plp/.git] / lib / PLP / Tie / Headers.pm
index c675f8a128d7f8420caeb00ab6b296117bef71cb..8e023fb4fab45ce4cefb8ec8eee5dfac21b5e0ad 100644 (file)
@@ -26,12 +26,18 @@ sub TIEHASH {
                {
                        '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} };
 }
@@ -50,6 +56,7 @@ sub STORE {
        } else {
                $self->[1]->{lc $key} = $key;
        }
+       $self->[2] = 0 if $key eq 'Content-Type';
        return ($self->[0]->{$key} = $value);
 }