最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

將HTML的左右尖括號(hào)等轉(zhuǎn)義成實(shí)體形式的兩種實(shí)現(xiàn)方式

 更新時(shí)間:2014年05月04日 10:29:12   作者:  
這篇文章主要介紹了將HTML的左右尖括號(hào)等轉(zhuǎn)義成實(shí)體形式的兩種實(shí)現(xiàn)方式,需要的朋友可以參考下
前端開(kāi)發(fā)工作中,經(jīng)常需要將HTML的左右尖括號(hào)等轉(zhuǎn)義成實(shí)體形式。我們不能把<,>,&等直接顯示在最終看到的網(wǎng)頁(yè)里。需要將其轉(zhuǎn)義后才能在網(wǎng)頁(yè)上顯示。

轉(zhuǎn)義字符(Escape Sequence)也稱(chēng)字符實(shí)體(Character Entity)。定義轉(zhuǎn)義字符串的主要原因是

“<”和“>”等符號(hào)已經(jīng)用來(lái)表示HTML TAG,因此不能直接當(dāng)作文本中的符號(hào)來(lái)使用。但有時(shí)需求是在HTML頁(yè)面上使用這些符號(hào),所以需要定義它的轉(zhuǎn)義字符串。
有些字符在A(yíng)SCII字符集中沒(méi)有定義(如版權(quán)符號(hào)“©”)。因此需要使用轉(zhuǎn)義字符(“©”對(duì)應(yīng)的轉(zhuǎn)義字符是“&copy;”)來(lái)表示。

這里提供兩個(gè)函數(shù)escape和unescape,分別實(shí)現(xiàn)將HTML轉(zhuǎn)義為實(shí)體和回轉(zhuǎn)。

方式一、一個(gè)映射表+正則替換
復(fù)制代碼 代碼如下:

var keys = Object.keys || function(obj) {
obj = Object(obj)
var arr = []
for (var a in obj) arr.push(a)
return arr
}
var invert = function(obj) {
obj = Object(obj)
var result = {}
for (var a in obj) result[obj[a]] = a
return result
}
var entityMap = {
escape: {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
}
}
entityMap.unescape = invert(entityMap.escape)
var entityReg = {
escape: RegExp('[' + keys(entityMap.escape).join('') + ']', 'g'),
unescape: RegExp('(' + keys(entityMap.unescape).join('|') + ')', 'g')
}

// 將HTML轉(zhuǎn)義為實(shí)體
function escape(html) {
if (typeof html !== 'string') return ''
return html.replace(entityReg.escape, function(match) {
return entityMap.escape[match]
})
}
// 將實(shí)體轉(zhuǎn)回為HTML
function unescape(str) {
if (typeof str !== 'string') return ''
return str.replace(entityReg.unescape, function(match) {
return entityMap.unescape[match]
})
}

方式二、利用瀏覽器DOM API
復(fù)制代碼 代碼如下:

// 將HTML轉(zhuǎn)義為實(shí)體
function escape(html){
var elem = document.createElement('div')
var txt = document.createTextNode(html)
elem.appendChild(txt)
return elem.innerHTML;
}
// 將實(shí)體轉(zhuǎn)回為HTML
function unescape(str) {
var elem = document.createElement('div')
elem.innerHTML = str
return elem.innerText || elem.textContent
}

有個(gè)缺陷是只能轉(zhuǎn)義“< > & ”,對(duì)于單引號(hào),雙引號(hào)都不轉(zhuǎn)義。另外一些非ASCII也不能轉(zhuǎn)義。選擇時(shí)須注意。

比較:

方式1 代碼量較大,但靈活性,完整性都比方式2強(qiáng)??筛鶕?jù)需求添加或減少映射表entityMap,且可以運(yùn)行在任意JS環(huán)境中。

方式2 為hack方式,代碼量少很多,利用瀏覽器內(nèi)部API就行了轉(zhuǎn)義和轉(zhuǎn)回(主流瀏覽器都支持)。不具完整性,很明顯只能在瀏覽器環(huán)境中使用(比如不能在Node.js中跑)。

相關(guān)文章

  • Javascript調(diào)用函數(shù)方法的幾種方式介紹

    Javascript調(diào)用函數(shù)方法的幾種方式介紹

    這篇文章主要介紹了Javascript調(diào)用函數(shù)方法的幾種方式介紹,本文講解了func()、(function(arg){})(window)、func.bind(sth)()、func.call()、func.apply()等5種方式,需要的朋友可以參考下
    2015-03-03
  • JS 數(shù)字轉(zhuǎn)換研究總結(jié)

    JS 數(shù)字轉(zhuǎn)換研究總結(jié)

    這篇文章主要介紹了JS 數(shù)字轉(zhuǎn)換實(shí)現(xiàn)方法,需要的朋友可以參考下
    2013-12-12
  • Javascript創(chuàng)建Silverlight Plugin以及自定義nonSilverlight和lowSilverlight樣式

    Javascript創(chuàng)建Silverlight Plugin以及自定義nonSilverlight和lowSilverl

    我們?cè)谑褂肰isual Studio IDE創(chuàng)建Silverlight工程時(shí),默認(rèn)情況下都會(huì)自動(dòng)生成一個(gè)用于調(diào)試和預(yù)覽Silverlight的Web工程,該工程包含了html和aspx頁(yè)面,以及Silverlight.js腳本文件。
    2010-06-06
  • Js+php實(shí)現(xiàn)異步拖拽上傳文件

    Js+php實(shí)現(xiàn)異步拖拽上傳文件

    本文給大家分享的是使用php結(jié)合js實(shí)現(xiàn)異步拖拽上傳文件的代碼,及示例,有需要的小伙伴可以參考下。
    2015-06-06
  • js 定時(shí)器setTimeout無(wú)法調(diào)用局部變量的解決辦法

    js 定時(shí)器setTimeout無(wú)法調(diào)用局部變量的解決辦法

    javascript中定時(shí)器setTimeout無(wú)法調(diào)用局部變量,只需要將setTimeout的第一個(gè)參數(shù)改成函數(shù)對(duì)象,而不是字符串,就可以了
    2013-11-11
  • 最新評(píng)論

    平阴县| 静宁县| 澎湖县| 新余市| 城固县| 讷河市| 澎湖县| 道真| 临颍县| 绥滨县| 弥勒县| 马关县| 康乐县| 霍州市| 南漳县| 高清| 区。| 富蕴县| 常宁市| 修文县| 常熟市| 静安区| 莆田市| 高邑县| 民乐县| 时尚| 门源| 呼玛县| 崇明县| 探索| 谢通门县| 寿宁县| 唐河县| 东港市| 疏附县| 连州市| 长汀县| 藁城市| 盐边县| 灌南县| 文山县|