Codifica <, >, & e aspas para HTML, ou devolve as entidades para caracteres.
Se uma cadeia pode conter < ou & e você a solta no HTML, o navegador trata como marcação. Codificar transforma esses caracteres em entidades. Decodificar devolve as entidades a caracteres quando você lê o fonte. Não é o mesmo que escapar JSON, e não remove tags: reescreve caracteres.
&, <, > e os dois tipos de aspas.&#xHHHH;. Desligue quando a página é UTF-8 e só os caracteres de marcação devem mudar.中, hexadecimais como 中, e uma lista curta de nomes: amp, lt, gt, quot, apos, nbsp, copy, reg, trade, mdash, ndash, hellip, laquo, raquo, bull, middot, euro, pound, yen, cent, sect, para, deg, plusmn, times, divide, micro. Nome fora da lista permanece.Codificar não envolve o resultado numa tag e não acrescenta doctype. Um & que já abre uma entidade é escapado de novo se você codificar duas vezes, e surge &. Decodificar uma vez tira uma camada. Nomes fora dessa lista, inclusive muitos do HTML5, ficam como você colou. Entidade numérica que não é um ponto de código válido permanece texto.
Se você estava codificando, o próprio & foi escapado e você vê o fonte da entidade. Mude para decodificar para um nome conhecido virar o caractere.
Esta página cobre os nomes que aparecem em texto comum, mais qualquer entidade numérica. Nome desconhecido fica visível, em vez de sumir por causa de um erro de digitação.