フロントエンドの開発では、HTMLの左右の角度括弧をエンティティフォームに逃れる必要があることがよくあります。最終的に表示されるWebページに<、>などを直接表示することはできません。 Webページに表示する前に逃げる必要があります。
エスケープシーケンスは、文字エンティティとも呼ばれます。脱出した弦を定義する主な理由はです
「<」や「>」などのシンボルは、HTMLタグを表すために使用されているため、テキストのシンボルとして直接使用することはできません。ただし、これらのシンボルをHTMLページで使用する必要がある場合があるため、エスケープストリングを定義する必要があります。
一部の文字は、ASCII文字セット(著作権記号「©」など)で定義されていません。したがって、それらを表現するには、エスケープ文字(「©」に対応するエスケープ文字は「©」)を使用する必要があります。
ここに2つの機能が脱出と脱出します。これは、それぞれエンティティとしてHTMLの脱出を実装し、回転させます。
方法1。マッピングテーブル +通常の交換
コードコピーは次のとおりです。
var keys = object.keys || function(obj){
obj = object(obj)
var arr = []
for(obj in obj)arr.push(a)
返品arr
}
var invert = function(obj){
obj = object(obj)
var result = {}
(objのvar a)result [obj [a]] = a
返品結果
}
var entityMap = {
逃げる: {
'&': '&'、
'<': '<'、
'>': '>'、
'"': '"'、
"'":' ''
}
}
entityMap.unescape = invert(entitymap.escape)
var entityReg = {
Escape:regexp( '[' + keys(entitymap.escape).join( '') + ']'、 'g')、
unescape:regexp( '(' + keys(entitymap.unescape).join( '|') + ')'、 'g')
}
//エンティティへのHTMLをエスケープします
関数エスケープ(HTML){
if(typeof html!== 'string')return ''
return html.replace(entityreg.escape、function(match){
return entitymap.escape [一致]
})
}
//エンティティをHTMLに戻します
function unescape(str){
if(typeof str!== 'string')return ''
return str.replace(entityreg.unescape、function(match){
return entitymap.unescape [一致]
})
}
方法2:ブラウザDom APIを使用します
コードコピーは次のとおりです。
//エンティティへのHTMLをエスケープします
関数エスケープ(HTML){
var elem = document.createelement( 'div')
var txt = document.createTextNode(HTML)
Elem.AppendChild(TXT)
ReturnElem.innerhtml;
}
//エンティティをHTMLに戻します
function unescape(str){
var elem = document.createelement( 'div')
Elem.innerhtml = str
rem.innertext ||を返しますElem.TextContent
}
「<>&」のみを逃れることができるという欠陥があり、単一の引用の場合、二重引用符は逃げられません。他の非ASCIIも逃げることはできません。選択するときは注意してください。
比較する:
方法1コードボリュームは大きいですが、柔軟性と整合性は方法2よりも優れています。マッピングテーブルエンティティマップは、要件に応じて追加または削減でき、JS環境で実行できます。
方法2は、はるかに少ないコードを備えたハッキングメソッドであり、ブラウザの内部APIを使用してエスケープしてリダイレクトできます(両方とも主流のブラウザがサポートしています)。完全ではなく、ブラウザ環境でのみ使用できることは明らかです(node.jsで実行していないなど)。