78

文字列からHTMLタグを削除したい。たとえば、次の文字列があるとします。

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

<p><p>を削除して「exampleivegotastring」だけを返す関数を作成するにはどうすればよいですか?

4

5 に答える 5

142

.text()関数を使用します。

var text = $("<p> example ive got a string</P>").text();

更新: Brilliand が以下で指摘しているように、入力文字列にタグが含まれておらず、運が悪いと、CSS セレクターとして扱われる可能性があります。したがって、このバージョンはより堅牢です。

var text = $("<div/>").html("<p> example ive got a string</P>").text();
于 2012-10-30T13:28:43.667 に答える
77

最も安全な方法は、ブラウザの 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>') );

ここで覚えておくべきことは、HTML 文字列 ( innerHTMLouterHTML) にアクセスするときに、ブラウザが TextNodes の特殊文字をエスケープすることです。比較すると、テキスト値 ( innerTexttextContent) にアクセスすると生の文字列が生成されます。つまり、それらは安全ではなく、XSS が含まれる可能性があります。

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

ブラウザ <= Internet Explorer 8 で作業する場合の純粋な JavaScript での最も簡単な方法は次のとおりです

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

しかし、正規表現を使用して HTML を解析する際に問題が発生するため、これはあまり優れたセキュリティを提供しません。また、これは HTML 文字のみを処理するため、完全に xss セーフではありません。

于 2012-10-30T13:30:41.910 に答える
4

これは、URL 画像を取得し、アイテムから p タグをエスケープする例です。

これを試して:

$('#img').attr('src').split('<p>')[1].split('</p>')[0]
于 2015-05-13T12:18:45.000 に答える
2

既存の分割機能を使用できます

簡単で途切れ途切れの例:

var str = '<p> example ive got a string</P>';
var substr = str.split('<p> ');
// substr[0] contains ""
// substr[1] contains "example ive got a string</P>"
var substr2 = substr [1].split('</p>');
// substr2[0] contains "example ive got a string"
// substr2[1] contains ""

この例は、分割がどのように機能するかを示すためのものです。

于 2012-10-30T13:36:12.670 に答える