文字列からHTMLタグを削除したい。たとえば、次の文字列があるとします。
<p> example ive got a string</P>
<p><p>
を削除して「exampleivegotastring」だけを返す関数を作成するにはどうすればよいですか?
文字列からHTMLタグを削除したい。たとえば、次の文字列があるとします。
<p> example ive got a string</P>
<p><p>
を削除して「exampleivegotastring」だけを返す関数を作成するにはどうすればよいですか?
.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();
最も安全な方法は、ブラウザの 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 文字列 ( innerHTML
、outerHTML
) にアクセスするときに、ブラウザが TextNodes の特殊文字をエスケープすることです。比較すると、テキスト値 ( innerText
、textContent
) にアクセスすると生の文字列が生成されます。つまり、それらは安全ではなく、XSS が含まれる可能性があります。
jQueryを使用する場合、使用.text()
は安全で下位互換性があります。この質問に対する他の回答を参照してください。
ブラウザ <= Internet Explorer 8 で作業する場合の純粋な JavaScript での最も簡単な方法は次のとおりです。
string.replace(/(<([^>]+)>)/ig,"");
しかし、正規表現を使用して HTML を解析する際に問題が発生するため、これはあまり優れたセキュリティを提供しません。また、これは HTML 文字のみを処理するため、完全に xss セーフではありません。
これは、URL 画像を取得し、アイテムから p タグをエスケープする例です。
これを試して:
$('#img').attr('src').split('<p>')[1].split('</p>')[0]
既存の分割機能を使用できます
簡単で途切れ途切れの例:
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 ""
この例は、分割がどのように機能するかを示すためのものです。