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 {