从输入字段读取属性时,HTML编码丢失

从输入字段读取属性时,HTML编码丢失

我正在使用JavaScript从隐藏字段中提取值并将其显示在文本框中。隐藏字段中的值已编码。

例如,

<input id='hiddenId' type='hidden' value='chalk &amp; cheese' />

被拉进去

<input type='text' value='chalk &amp; cheese' />

通过一些jQuery从隐藏字段中获取值(此时我丢失了编码):

$('#hiddenId').attr('value')

问题是,当我chalk &amp; cheese从隐藏字段中读取时,JavaScript似乎失去了编码。我不想要价值chalk & cheese。我希望amp;保留文字。

是否有一个JavaScript库或jQuery方法将对字符串进行HTML编码?


翻翻过去那场雪
浏览 658回答 3
3回答

Helenr

编辑:这个答案很久以前发布了,该htmlDecode函数引入了一个XSS漏洞。它已被修改,将临时元素从a&nbsp;div更改为textarea减少XSS机会。但是现在,我鼓励您按照其他anwswer的建议使用DOMParser API&nbsp;。我使用这些功能:function&nbsp;htmlEncode(value){ &nbsp;&nbsp;//&nbsp;Create&nbsp;a&nbsp;in-memory&nbsp;element,&nbsp;set&nbsp;its&nbsp;inner&nbsp;text&nbsp;(which&nbsp;is&nbsp;automatically&nbsp;encoded) &nbsp;&nbsp;//&nbsp;Then&nbsp;grab&nbsp;the&nbsp;encoded&nbsp;contents&nbsp;back&nbsp;out.&nbsp;The&nbsp;element&nbsp;never&nbsp;exists&nbsp;on&nbsp;the&nbsp;DOM. &nbsp;&nbsp;return&nbsp;$('<textarea/>').text(value).html();}function&nbsp;htmlDecode(value){ &nbsp;&nbsp;return&nbsp;$('<textarea/>').html(value).text();}基本上,div元素在内存中创建,但它永远不会附加到文档中。在htmlEncode函数上我设置了innerText元素,并检索编码的innerHTML;&nbsp;在htmlDecode函数上我设置innerHTML元素的值并innerText检索。在这里查看一个运行示例。
打开App,查看更多内容
随时随地看视频慕课网APP