将HTML的左右括号转换成实体形式的两种实现

在前端开发中,常常需要将HTML的左右括号转换成实体形式,我们不能在网页上直接看到它,直接在网页上等待,需要在网页上显示之前先将其转义。

转义字符(转义序列)也称为字符实体(字符实体)。定义转义字符串的主要原因是

该符号已被用来表示HTML标记,因此它不能直接作为文本中的符号使用,但有时需要在HTML页面上使用这些符号,因此您需要定义它的逸出字符串。
在ASCII字符集(如版权符号(C))中没有定义一些字符。因此,转义字符((c)与字符的含义相对应的含义是(c))来表示。

在这里,两个功能,逃避和unescape,提供翻译HTML为实体和旋转,分别。

一,一映射表+正则置换
复制代码代码如下所示:
VAR键= object.keys功能(obj){ | |
obj =对象(目标)
var arr = { }
对于(OBJ VaR)arr.push(一)
报酬
}
无功倒=功能(obj){
obj =对象(目标)
var结果{ }
对于(OBJ VaR){ } } { obj结果=一
返回结果
}
无功entitymap = { {
逃脱:{
' ' ',
< < > < <,
>>,
' ' ',',' '

}
}
entitymap.unescape =转化(entitymap。逃)
无功entityreg = { {
逃脱:正则表达式({+键(entitymap。逃脱)。加入()+} ','克'),
Unescape:RegExp('(' +键(entitymap。unescape)。加入(| ')+ '),'克')
}

转义实体
函数转义(HTML){
如果(typeof html'string'return= =!)
返回html.replace(entityreg.escape,功能(选配){)
返回entitymap。逃避{火柴}
})
}
实体返回到HTML
功能unescape(STR){
如果(typeof str'string'return= =!)
返回str.replace(entityreg.unescape,功能(选配){)
返回entitymap unescape {火柴}。
})
}

模式二,使用浏览器DOM API
复制代码代码如下所示:
转义实体
函数转义(HTML){
var elem = document.createelement('div)
VaR txt = document.createtextnode(HTML)
elem.appendchild(TXT)
返回elem.innerhtml;
}
实体返回到HTML
功能unescape(STR){
var elem = document.createelement('div)
elem.innerhtml = str
返回elem.innertext elem.textcontent | |
}

只有一个缺陷是可以转移的。对于单引号,双引号不存在。其他一些非ASCII不能转义。应注意选择。

比较:

模式1有大量的代码,但它比模式2更灵活、更完整。映射表entitymap可以增加或减少根据要求可以运行在任何JS环境。

2的方式是黑客,更少的代码,在浏览器中使用API来逃避和返回(主流浏览器被支持)。没有完整性,很明显它只能在浏览器环境中使用(例如,你不能在节点上运行)。