Add optional support for HTML entities
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 45a5395..03211a8 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -6,4 +6,5 @@
 Michal Jemala (michaljemala)
 Nicolas Piganeau (npiganeau)
 Chris Brown (ccbrown)
-Earncef Sequeira (earncef)
\ No newline at end of file
+Earncef Sequeira (earncef)
+Gabriel de Labachelerie (wuzuf)
diff --git a/etree.go b/etree.go
index dd75456..4115016 100644
--- a/etree.go
+++ b/etree.go
@@ -34,6 +34,9 @@
 	// Permissive allows input containing common mistakes such as missing tags
 	// or attribute values. Default: false.
 	Permissive bool
+
+	// Entity to be passed to standard xml.Decoder. Default: nil.
+	Entity map[string]string
 }
 
 // newReadSettings creates a default ReadSettings record.
@@ -402,6 +405,7 @@
 	dec := xml.NewDecoder(r)
 	dec.CharsetReader = settings.CharsetReader
 	dec.Strict = !settings.Permissive
+	dec.Entity = settings.Entity
 	var stack stack
 	stack.push(e)
 	for {
diff --git a/etree_test.go b/etree_test.go
index 7343b77..0ca2b5e 100644
--- a/etree_test.go
+++ b/etree_test.go
@@ -5,6 +5,7 @@
 package etree
 
 import (
+	"encoding/xml"
 	"io"
 	"testing"
 )
@@ -170,6 +171,27 @@
 	}
 }
 
+func TestDocumentRead_HTMLEntities(t *testing.T) {
+	s := `<store>
+	<book lang="en">
+		<title>&rarr;&nbsp;Great Expectations</title>
+		<author>Charles Dickens</author>
+	</book>
+</store>`
+
+	doc := NewDocument()
+	err := doc.ReadFromString(s)
+	if err == nil {
+		t.Fatal("etree: incorrect ReadFromString result")
+	}
+
+	doc.ReadSettings.Entity = xml.HTMLEntity
+	err = doc.ReadFromString(s)
+	if err != nil {
+		t.Fatal("etree: incorrect ReadFromString result")
+	}
+}
+
 func TestEscapeCodes(t *testing.T) {
 	cases := []struct {
 		input         string