js 字符串转html,html实体文字转换

  js 字符串转html,html实体文字转换

  本教程运行环境:windows7系统,javascript1.8.5版本1.8.5,戴尔G3电脑。

  解决这个问题,可以分为两种情况:一种是只包含、的html实体,一种是广义实体,不限于上述情况。对于后者,在我看来,除了列出所有实体符号,写switch case语句,真的没有什么好办法。如果你有什么好的想法,欢迎随时评论。)。对于前者,原生js其实是支持的。例如,节点的innerText属性(FireFox中的textContent属性)自动对文本中的HTML语法字符(小于符号、大于符号、引号和&符号)进行编码。

  实际上二者并不完全一样,innerText会忽略行内样式和脚本,而textContent则会原样返回行内样式和文本。)。原理是设置innerText会生成当前节点的一个子文本节点,为了保证只生成一个子文本节点,需要对文本进行HTML编码。虽然innerHTML也可以做到,但它只是改变了标签的文本。下面的例子显示了它们的不同之处。

  var div=document . createelement( div );

  div . innertext= phello world/p ;

   div.innerText //phello world/p

  div . innerhtml// lt;pgthello ampworldlt/pgt;

  div.innerHTML=phello world/p

  div . innerhtml// phello amp;lt;世界/p

  Div.innerText //hello world 从上面的例子可以看出两者的区别:innerText会对所有的文本进行转义(当然不是所有的文本,比如空格),而innerHTML会对标签内部的文本进行转义。像P这样的标记不会转义,但是隔离的小于大于号仍然会被转换。(上面代码中innerHTML设置的内容之所以和解析的内容不一样,是因为返回的是浏览器根据原字符串解析成DOM树后的序列化结果。)根据上面程序的结果,我们可以得到一个简单的转换函数:

  //仅用于包含`、的文本转换。

  函数stringToEntity(str){

  var div=document . createelement( div );

  div.innerText=str

  div.textContent=str

  var res=div.innerHTML

  console.log(str,-,RES);

  返回res

  }其实除了innerText,还可以通过创建一个文本节点来进行转义,也就是使用document.createTextNode()。这种方法的大多数应用场景都在逃避用户输入。例如,出于业务需求,我们需要将用户的输入写入网页。将用户的输入直接写入网页而不进行转义通常是不可行的,因为容易出现XSS漏洞。但是,我们可以使用document.createTextNode()方法将用户输入作为文本节点,然后将其插入到文档中。该方法对出现的特殊标记进行转义。例如,下面的代码:

  var str= img src= a valid URL onl load= alert(1)/img ;

  var text=document . create text node(str);

  $(容器)。appendChild(文本);使用$(container )。innerHTML=str直接在上面的代码中不转义;它将使图片加载并在onload中运行代码。如果代码是恶意的,会对我们网站的用户造成损害。但是对小于号和大于号进行转义后,就不会出现这个问题了。

  【推荐学习:javascript高级教程】以上是javascript如何实现html字符到实体转换的详细内容。更多请关注其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: