I’m using JavaScript to pull a value out from a hidden field and display it in a textbox. The value in the hidden field is encoded.
For example,
<input id='hiddenId' type='hidden' value='chalk & cheese' />
gets pulled into
<input type='text' value='chalk & cheese' />
via some jQuery to get the value from the hidden field (it’s at this point that I lose the encoding):
$('#hiddenId').attr('value')
The problem is that when I read chalk & cheese from the hidden field, JavaScript seems to lose the encoding. I do not want the value to be chalk & cheese. I want the literal amp; to be retained.
Is there a JavaScript library or a jQuery method that will HTML-encode a string?
EDIT: This answer was posted a long ago, and the
htmlDecodefunction introduced a XSS vulnerability. It has been modified changing the temporary element from adivto atextareareducing the XSS chance. But nowadays, I would encourage you to use the DOMParser API as suggested in other anwswer.I use these functions:
Basically a textarea element is created in memory, but it is never appended to the document.
On the
htmlEncodefunction I set theinnerTextof the element, and retrieve the encodedinnerHTML; on thehtmlDecodefunction I set theinnerHTMLvalue of the element and theinnerTextis retrieved.Check a running example here.