我想通过JavaScript函数将文本显示为HTML。如何在JavaScript中转义HTML特殊字符?有API吗?
当前回答
DOM元素支持通过赋值innerText将文本转换为HTML。innerText不是一个函数,但是给它赋值就好像文本被转义了一样。
document.querySelectorAll('#id')[0].innerText = 'unsafe " String >><>';
其他回答
我想出了这个解决方案。
假设我们想向元素添加一些HTML,其中包含来自用户或数据库的不安全数据。
var unsafe = 'some unsafe data like <script>alert("oops");</script> here';
var html = '';
html += '<div>';
html += '<p>' + unsafe + '</p>';
html += '</div>';
element.html(html);
它对于XSS攻击是不安全的。现在加上这个: $ (document.createElement (div)) . html(不安全)。text ();
就是这样
var unsafe = 'some unsafe data like <script>alert("oops");</script> here';
var html = '';
html += '<div>';
html += '<p>' + $(document.createElement('div')).html(unsafe).text(); + '</p>';
html += '</div>';
element.html(html);
对我来说,这比使用.replace()容易得多,它会删除!!所有可能的HTML标签(我希望)。
试试这个,使用prototype.js库:
string.escapeHTML();
尝试演示
显示未编码文本的最简洁和有效的方法是使用textContent属性。
比使用innerHTML更快。这还没有考虑到逃逸开销。
document.body.textContent = 'a <b> c </b>';
我在构建DOM结构时遇到了这个问题。这个问题帮助我解决了这个问题。我想使用双雪佛龙作为路径分隔符,但追加一个新的文本节点直接导致转义字符代码显示,而不是字符本身:
var _div = document.createElement('div');
var _separator = document.createTextNode('»');
//_div.appendChild(_separator); /* This resulted in '»' being displayed */
_div.innerHTML = _separator.textContent; /* This was key */
使用Lodash:
_.escape('fred, barney, & pebbles');
// => 'fred, barney, & pebbles'
源代码
推荐文章
- 使伸缩项目正确浮动
- Babel 6改变了它导出默认值的方式
- 如何配置历史记录?
- ES6模板文字可以在运行时被替换(或重用)吗?
- [Vue警告]:找不到元素
- 可以在setInterval()内部调用clearInterval()吗?
- AngularJS控制器的生命周期是什么?
- 无法读取未定义的属性“msie”- jQuery工具
- 形式内联内的形式水平在twitter bootstrap?
- 我的蛋蛋怎么不见了?
- JavaScript中的排列?
- 自定义元素在HTML5中有效吗?
- JavaScript中有睡眠/暂停/等待功能吗?
- 如何触发自动填充在谷歌Chrome?
- 创建圈div比使用图像更容易的方法?