当前位置: 首页 > 编程笔记 >

JS实现HTML标签转义及反转义

宰父存
2023-03-14
本文向大家介绍JS实现HTML标签转义及反转义,包括了JS实现HTML标签转义及反转义的使用技巧和注意事项,需要的朋友参考一下

简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中显示。

这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。

由于是纯前端操作,不涉及后端,因此需要通过js对输入内容进行转义。

这里提供一个非常简单有效的转义方案,利用了innerHTMLinnerText

注:火狐不支持innerText,需要使用 textContent 属性,而IE早期版本不支持此属性,为了同时兼容IE及火狐,需要进行判断操作.

因为innerText(textContent)会获取纯文本内容,忽略html节点标签,而innerHTML会显示标签内容,

所以我们先将需转义的内容赋值给innerText(textContent),再获取它的innerHTML属性,这时获取到的就是转义后文本内容。

代码如下:

function HTMLEncode(html) {
 var temp = document.createElement("div");
 (temp.textContent != null) ? (temp.textContent = html) : (temp.innerText = html);
 var output = temp.innerHTML;
 temp = null;
 return output;
}
var tagText = "<p><b>123&456</b></p>";
console.log(HTMLEncode(tagText));//&lt;p&gt;&lt;b&gt;123&amp;456&lt;/b&gt;&lt;/p&gt; 

通过测试结果,可以看到html标签及&符都被转义后保存。

同理,反转义的方法为先将转义文本赋值给innerHTML,然后通过innerText(textContent)获取转义前的文本内容

function HTMLDecode(text) { 
 var temp = document.createElement("div"); 
 temp.innerHTML = text; 
 var output = temp.innerText || temp.textContent; 
 temp = null; 
 return output; 
} 
var tagText = "<p><b>123&456</b></p>";
var encodeText = HTMLEncode(tagText);
console.log(encodeText);//&lt;p&gt;&lt;b&gt;123&amp;456&lt;/b&gt;&lt;/p&gt;
console.log(HTMLDecode(encodeText)); //<p><b>123&456</b></p> 

编码反编码核心函数

 function html_encode(str) 
  { 
    var s = ""; 
    if (str.length == 0) return ""; 
    s = str.replace(/&/g, "&amp;"); 
    s = s.replace(/</g, "&lt;"); 
    s = s.replace(/>/g, "&gt;"); 
    s = s.replace(/ /g, "&nbsp;"); 
    s = s.replace(/\'/g, "&#39;"); 
    s = s.replace(/\"/g, "&quot;"); 
      s = s.replace(/\n/g, "<br/>"); 
    return s; 
  } 
 
  function html_decode(str) 
  { 
    var s = ""; 
    if (str.length == 0) return ""; 
    s = str.replace(/&amp;/g, "&"); 
    s = s.replace(/&lt;/g, "<"); 
    s = s.replace(/&gt;/g, ">"); 
    s = s.replace(/&nbsp;/g, " "); 
    s = s.replace(/&#39;/g, "\'"); 
    s = s.replace(/&quot;/g, "\""); 
    s = s.replace(/<br\/>/g, "\n"); 
    return s; 
  } 
 
 
 
  console.log(html_decode('&lt;div&gt;123&lt;/div&gt;')); 
  console.log(html_encode(html_decode('&lt;div&gt;123&lt;/div&gt;')));

实例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
 function html_encode(str) 
  { 
    var s = ""; 
    if (str.length == 0) return ""; 
    s = str.replace(/&/g, "&amp;"); 
    s = s.replace(/</g, "&lt;"); 
    s = s.replace(/>/g, "&gt;"); 
    s = s.replace(/ /g, "&nbsp;"); 
    s = s.replace(/\'/g, "&#39;"); 
    s = s.replace(/\"/g, "&quot;"); 
      s = s.replace(/\n/g, "<br/>"); 
    return s; 
  } 
 
  function html_decode(str) 
  { 
    var s = ""; 
    if (str.length == 0) return ""; 
    s = str.replace(/&amp;/g, "&"); 
    s = s.replace(/&lt;/g, "<"); 
    s = s.replace(/&gt;/g, ">"); 
    s = s.replace(/&nbsp;/g, " "); 
    s = s.replace(/&#39;/g, "\'"); 
    s = s.replace(/&quot;/g, "\""); 
    s = s.replace(/<br\/>/g, "\n"); 
    return s; 
  } 
 
console.log(html_decode('&lt;div&gt;123&lt;/div&gt;')); 
console.log(html_encode(html_decode('&lt;div&gt;123&lt;/div&gt;')));
</script>
</head>
<body>

</body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持小牛知识库!

 类似资料:
  • 问题内容: 我们如何直接转换为?使用转换到相当容易,但是又很繁琐。在golang中有没有直接的方法可以做到这一点? 问题答案: 您可以使用进行转换。 您应该注意的一件事是,只能取消引用中的字符串(例如,以引号char 或反引号char 开头和结尾```),因此我们必须手动附加该字符串。 例: 输出(在Go Playground上尝试): 注意: 要对HTML文本进行转义和转义,可以使用该包。引用其

  • 问题内容: 我正在写一个Chrome扩展程序,包括做了 很多 以后的工作中:消毒的字符串 可能 包含HTML标签,通过转换,并以,和分别。 (换句话说,与PHP相同-我认为并不需要转换双引号字符。) 这是到目前为止我发现的最快的功能: 但是当我不得不一次性运行数千个字符串时,仍然存在很大的滞后。 任何人都可以对此进行改进吗?如果有所不同,则通常用于10到150个字符之间的字符串。 (我曾经想到的一

  • 本文向大家介绍js处理网页编辑器转义、去除转义、去除HTML标签的正则,包括了js处理网页编辑器转义、去除转义、去除HTML标签的正则的使用技巧和注意事项,需要的朋友参考一下 富文本编辑器生成的HTML标签,进行转义,然后写入数据库,防止脚本注入: 1、从数据库拿出的转义后的HTML标签内容,先得去除转义,然后再去除HTML标签,是生成缩略文字。 如果是文章详情页的话,直接去除转义就可以显示在页面

  • 反转义 HTML 字符。 使用带有正则表达式的 String.replace() 来匹配需要被转义的字符,使用一个回调函数使用字典(对象)替换每个 HTML 实体字符为其关联的非转义字符。 const unescapeHTML = str => str.replace( /&amp;|&lt;|&gt;|'|&quot;/g, tag => ({ '

  • 问题内容: 想知道是否有一种简单的方法可以在Objective C中执行简单的HTML转义/转义。我想要的是这样的伪代码: 哪个返回 希望也转义所有其他HTML实体,甚至ASCII码(例如Ӓ等)。 Cocoa Touch / UIKit中有什么方法可以做到这一点? 问题答案: 包含以下解决方案。可可CF具有CFXMLCreateStringByUnescapingEntities函数,但在iPho

  • 问题内容: 目前,我过去通常在字符串中转义不需要的HTML标记,但是后来我意识到它也可以转义带有重音的字符,这是我不想要的。 您是否知道任何用于转义HTML标记的解决方案,但请保留我的特殊字母(对某些人来说,这是正常的;])。 提前致谢! 巴拉斯 问题答案: