diff --git a/reader/rss/parser_test.go b/reader/rss/parser_test.go index 6767212756fa76cd9d144d152721fb557bdc3ca5..197994c71f7bd9ca341dc256cc19a705a21f43f5 100644 --- a/reader/rss/parser_test.go +++ b/reader/rss/parser_test.go @@ -998,6 +998,25 @@ func TestParseFeedTitleWithHTMLEntity(t *testing.T) { } } +func TestParseFeedTitleWithUnicodeEntityAndCdata(t *testing.T) { + data := `<?xml version="1.0" encoding="utf-8"?> + <rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"> + <channel> + <link>https://example.org/</link> + <title><![CDATA[Jenny’s Newsletter]]></title> + </channel> + </rss>` + + feed, err := Parse("https://example.org/", bytes.NewBufferString(data)) + if err != nil { + t.Fatal(err) + } + + if feed.Title != `Jenny’s Newsletter` { + t.Errorf(`Incorrect title, got: %q`, feed.Title) + } +} + func TestParseItemTitleWithHTMLEntity(t *testing.T) { data := `<?xml version="1.0" encoding="utf-8"?> <rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"> diff --git a/reader/rss/rss.go b/reader/rss/rss.go index 01caada4166e7db30a0135794999a8762585d179..db08239321f21cb64b2cd0639d9625037023b8dc 100644 --- a/reader/rss/rss.go +++ b/reader/rss/rss.go @@ -53,7 +53,7 @@ func (r *rssFeed) Transform(baseURL string) *model.Feed { feed.FeedURL = feedURL } - feed.Title = strings.TrimSpace(r.Title) + feed.Title = html.UnescapeString(strings.TrimSpace(r.Title)) if feed.Title == "" { feed.Title = feed.SiteURL }