diff --git a/src/document/html/parser/link.c b/src/document/html/parser/link.c
index 1b774c2a..8ac09a63 100644
--- a/src/document/html/parser/link.c
+++ b/src/document/html/parser/link.c
@@ -368,6 +368,14 @@ put_link_line(unsigned char *prefix, unsigned char *linkname,
format.link = join_urls(html_context->base_href, link);
format.target = stracpy(target);
format.style.fg = format.clink;
+ /* FIXME: linkname typically comes from get_attr_val, which
+ * has already converted it from the document charset to the
+ * terminal charset and expanded character entity references.
+ * The following put_chrs call again converts the characters
+ * and expands entity references. So if we have
+ *
+ * then ELinks will display "foo?<" rather than "foo?<".
+ * This was mentioned in bug 213. */
put_chrs(html_context, linkname, strlen(linkname));
ln_break(html_context, 1);
pop_html_element(html_context);