]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
(irssi-feed) Fix issues with character sets (hackily)
authorCaesar <redacted>
Sat, 17 May 2014 10:49:00 +0000 (12:49 +0200)
committerbw1 <redacted>
Sat, 14 Apr 2018 17:20:21 +0000 (19:20 +0200)
scripts/irssi-feed.pl

index 2753ba8bcc740ad932f303b06ae7e1bb1fe3d5b3..7bcafbd24daedfed9cea1dd2b28ccb23035884b8 100644 (file)
@@ -290,7 +290,7 @@ sub feed_io_event_write {
                my $req = "GET " . $query . " HTTP/1.0\r\n" .
                                "Host: " . $self->{uri}->host . "\r\n" .
                                "User-Agent: Irssi feed reader " . $VERSION . "\r\n" .
-                               "Accept-Encoding: gzip\r\n" .
+                               "Accept-Encoding: " . HTTP::Message->decodable() . "\r\n" .
                                "Connection: close\r\n\r\n";
                $self->{io}->{conn}->send($req);
                Irssi::input_remove($self->{io}->{writetag}) if $self->{io}->{writetag};
@@ -337,7 +337,12 @@ sub feed_parse_buffer {
                }
        }
        return if not $http->is_success;
-       my $httpcontent = $http->decoded_content;
+       my $httpcontent = $http->decoded_content();
+       my $contenttype = $http->header('Content-Type');
+       if($contenttype and $contenttype =~ /^.*charset\s*=\s*(?<charset>[^;]*)(;|$)/ and $+{charset} !~ /UTF-8/i) {
+               # http specifies a non-utf8 content, but HTTP::Response will convert that to utf-8 for us.
+               $httpcontent =~ s/encoding\s*=\s*("[^"]*"|[^" ]*)\s(?<!\?>)//;
+       }
        my $data = eval { $feed->{io}->{xml} = XML::Feed->parse(\$httpcontent) };
        if($data) {
                $feed->{name} = $data->title;
git clone https://git.99rst.org/PROJECT