1. ホーム
  2. jquery

jQueryでHTMLタグを剥がすには?

2023-08-07 07:30:05

質問

文字列からHTMLタグを削除したい。例えば、以下のような文字列があるとします。

 <p> example ive got a string</P>

を削除する関数はどのように書けばよいのでしょうか? <p><p> を削除して、単に"example ive got a string"を返す関数を書くにはどうしたらよいでしょうか?

どのように解決するのですか?

この 最も安全な方法 は、ブラウザのTextNodeがコンテンツを正しくエスケープすることに依存することです。以下はその例です。

function encodeHTML(dirtyString) {
  var container = document.createElement('div');
  var text = document.createTextNode(dirtyString);
  container.appendChild(text);
  return container.innerHTML; // innerHTML will be a xss safe string
}

document.write( encodeHTML('<p>some <span>content</span></p>') );
document.write( encodeHTML('<script><p>some <span>content</span></p>') );

ここで覚えておきたいのは、ブラウザがTextNodeの特殊文字をエスケープするのは、htmlの文字列( innerHTML , outerHTML ). それに比べて、テキスト値へのアクセスは ( innerText , textContent ) は生の文字列を生成します。つまり、安全ではなく、XSSを含む可能性があります。

もしあなたが jQuery を使用すると .text() を使用することは安全であり、後方互換性があります。この質問に対する他の回答を参照してください。

最も簡単な方法 ブラウザ <= Internet Explorer 8 で作業する場合、純粋な JavaScript での最も簡単な方法です。

string.replace(/(<([^>]+)>)/ig,"");

しかし、正規表現でHTMLを解析することにはいくつかの問題があるので、これではあまり良いセキュリティは得られません。また、これはHTMLの文字だけを対象にしているので、完全にxssセーフというわけではありません。