lib/PublicInbox/Hval.pm | 4 ++-- lib/PublicInbox/View.pm | 11 ++++++----- public-inbox.cgi | 5 +++-- diff --git a/lib/PublicInbox/Hval.pm b/lib/PublicInbox/Hval.pm index 1a83cf10a54561f698f45a6671d6ed1f99734548..a93e8c247ea6cce2fd7b85398cb2405ef3dd06fa 100644 --- a/lib/PublicInbox/Hval.pm +++ b/lib/PublicInbox/Hval.pm @@ -7,7 +7,7 @@ use strict; use warnings; use fields qw(raw); use Encode qw(find_encoding); -use URI::Escape qw(uri_escape); +use URI::Escape qw(uri_escape_utf8); my $enc_ascii = find_encoding('us-ascii'); @@ -52,7 +52,7 @@ $enc_ascii->encode($s, Encode::HTMLCREF); } sub as_html { ascii_html($_[0]->{raw}) } -sub as_href { ascii_html(uri_escape($_[0]->{raw})) } +sub as_href { ascii_html(uri_escape_utf8($_[0]->{raw})) } sub raw { if (defined $_[1]) { diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 663eff5b9ac496f6f71ea1a24d63922058b4557c..c6ecee6ef9060eb1ac8e67fa7c2007228cfe82ed 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -4,7 +4,7 @@ package PublicInbox::View; use strict; use warnings; use PublicInbox::Hval; -use URI::Escape qw/uri_escape/; +use URI::Escape qw/uri_escape_utf8/; use Encode qw/find_encoding/; use Encode::MIME::Header; use Email::MIME::ContentType qw/parse_content_type/; @@ -213,12 +213,13 @@ } my $subj = $mime->header('Subject') || ''; $subj = "Re: $subj" unless $subj =~ /\bRe:/; - my $irp = uri_escape($mime->header_obj->header_raw('Message-ID') || ''); + my $irp = uri_escape_utf8( + $mime->header_obj->header_raw('Message-ID') || ''); delete $cc{$to}; - $to = uri_escape($to); - $subj = uri_escape($subj); + $to = uri_escape_utf8($to); + $subj = uri_escape_utf8($subj); - my $cc = uri_escape(join(',', values %cc)); + my $cc = uri_escape_utf8(join(',', values %cc)); my $href = "mailto:$to?In-Reply-To=$irp&Cc=${cc}&Subject=$subj"; 'reply'; diff --git a/public-inbox.cgi b/public-inbox.cgi index 26b0fc618798d3e86f2038811bf6a727b20f7063..87cc6943b1b344abe75e38ea5d6e0c4cb5466690 100755 --- a/public-inbox.cgi +++ b/public-inbox.cgi @@ -15,7 +15,7 @@ use warnings; use CGI qw(:cgi -nosticky); # PSGI/FastCGI/mod_perl compat use Encode qw(find_encoding); use PublicInbox::Config; -use URI::Escape qw(uri_escape uri_unescape); +use URI::Escape qw(uri_escape_utf8 uri_unescape); our $enc_utf8 = find_encoding('UTF-8'); our $LISTNAME_RE = qr!\A/([\w\.\-]+)!; our $pi_config; @@ -165,7 +165,8 @@ my $x = mid2blob($ctx); return r404() unless $x; require PublicInbox::View; - my $mid_href = PublicInbox::Hval::ascii_html(uri_escape($ctx->{mid})); + my $mid_href = PublicInbox::Hval::ascii_html( + uri_escape_utf8($ctx->{mid})); my $pfx = "../f/$mid_href.html"; require Email::MIME; [ 200, [ 'Content-Type' => 'text/html' ],