React 会将所有要显示到 DOM 的字符串转义,防止 XSS。所以如果 JSX 中含有转义后的实体字符比如 © (©) 最后显示到 DOM 中不会正确显示,因为 React 自动把 © 中的特殊字符转义了>
解决办法:
- 直接使用 UTF-8 字符 ©
- 使用对应字符的 Unicode 编码,查询编码
- 使用数组组装
<div>{['cc ', <span>©</span>, ' 2015']}</div>
- 直接插入原始的 HTML
<div dangerouslySetInnerHTML={{__html: 'cc © 2015'}} /> // cc © 2015
// 如果直接调用接口中返回的值dataHtml,则用以下方法
<div dangerouslySetInnerHTML={{__html: dataHtml}} />
* dangerouslySetInnerHTML是React标签的一个属性
* 其中有2个{{}},第1个代表Jsx{}开始,第2个代表dangerouslySetInnerHTML接收的是一个对象键值对
* 既可以插入DOM又可以插入字符串
* 不合时宜的使用 innerHTML可能会导致 cross-site scripting (XSS) 攻击。 净化用户的输入来显示的时候,经常会出现错误,不合适的净化也是导致网页攻击的原因之一。
* dangerouslySetInnerHTML 这个 prop 的命名是故意这么设计的,以此来警告,它的 prop 值( 一个对象而不是字符串 )应该被用来表明净化后的数据
网友评论