diff --git a/reader/rss/parser_test.go b/reader/rss/parser_test.go index 891b2e1e..1e57a97c 100644 --- a/reader/rss/parser_test.go +++ b/reader/rss/parser_test.go @@ -989,7 +989,53 @@ func TestParseItemTitleWithHTMLEntity(t *testing.T) { } if feed.Entries[0].Title != "" { - t.Errorf(`Incorrect title, got: %q`, feed.Title) + t.Errorf(`Incorrect title, got: %q`, feed.Entries[0].Title) + } +} + +func TestParseItemTitleWithNumericCharacterReference(t *testing.T) { + data := ` + + + https://example.org/ + Example + + Σ ß + http://www.example.org/article.html + + + ` + + feed, err := Parse("https://example.org/", bytes.NewBufferString(data)) + if err != nil { + t.Fatal(err) + } + + if feed.Entries[0].Title != "Σ ß" { + t.Errorf(`Incorrect title, got: %q`, feed.Entries[0].Title) + } +} + +func TestParseItemTitleWithDoubleEncodedEntities(t *testing.T) { + data := ` + + + https://example.org/ + Example + + 'Text' + http://www.example.org/article.html + + + ` + + feed, err := Parse("https://example.org/", bytes.NewBufferString(data)) + if err != nil { + t.Fatal(err) + } + + if feed.Entries[0].Title != "'Text'" { + t.Errorf(`Incorrect title, got: %q`, feed.Entries[0].Title) } } diff --git a/reader/rss/rss.go b/reader/rss/rss.go index 196b9d15..25348039 100644 --- a/reader/rss/rss.go +++ b/reader/rss/rss.go @@ -6,6 +6,7 @@ package rss // import "miniflux.app/reader/rss" import ( "encoding/xml" + "html" "path" "strconv" "strings" @@ -257,7 +258,7 @@ func (r *rssItem) entryTitle() string { } } - return strings.TrimSpace(title) + return html.UnescapeString(strings.TrimSpace(title)) } func (r *rssItem) entryContent() string {