Codifica <, >, & y las comillas para HTML, o devuelve las entidades a caracteres.
Si una cadena puede llevar < o & y la sueltas en HTML, el navegador la toma por marcado. Codificar convierte esos caracteres en entidades. Decodificar devuelve las entidades a caracteres cuando lees el fuente. No es lo mismo que escapar JSON, y no quita etiquetas: reescribe caracteres.
&, <, > y los dos tipos de comillas.&#xHHHH;. Apágalo cuando la página es UTF-8 y solo deben cambiar los caracteres de marcado.中, hexadecimales como 中, y una lista corta de nombres: 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. Un nombre que no esté ahí se queda igual.Codificar no envuelve el resultado en una etiqueta ni añade un doctype. Un & que ya abre una entidad se escapa otra vez si codificas dos veces, y aparece &. Decodificar una vez quita una capa. Los nombres fuera de esa lista, incluidos muchos de HTML5, se quedan como los pegaste. Una entidad numérica que no es un punto de código válido se queda como texto.
Si estabas codificando, el propio ampersand se escapó y ves el fuente de la entidad. Pasa a decodificar para que un nombre conocido se vuelva el carácter.
Esta página cubre los nombres que salen en texto corriente, más cualquier entidad numérica. Un nombre desconocido se conserva para que el error de escritura se vea, en vez de desaparecer.