diff options
-rwxr-xr-x | public-inbox-cgi | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/public-inbox-cgi b/public-inbox-cgi index 91314f06..cd79a4a7 100755 --- a/public-inbox-cgi +++ b/public-inbox-cgi @@ -26,11 +26,10 @@ BEGIN { } } -binmode STDOUT, ':utf8'; - my $ret = main(); my ($status, $headers, $body) = @$ret; +set_binmode($headers); if (@ARGV && $ARGV[0] eq 'static') { print $body; } else { # CGI @@ -143,3 +142,13 @@ sub get_mid_txt { my $x = mid2blob($ctx); $x ? [ "200 OK", {'Content-Type' => 'text/plain'}, $$x ] : r404(); } + +sub set_binmode { + my ($headers) = @_; + if ($headers->{'Content-Type'} eq 'text/plain') { + # no way to validate raw messages, mixed encoding is possible. + binmode STDOUT; + } else { # strict encoding for HTML and XML + binmode STDOUT, ':encoding(UTF-8)'; + } +} |