Ich möchte HTML-Tags aus einer Zeichenfolge entfernen. Angenommen, wir haben die Zeichenfolge:
<p> example ive got a string</P>
Wie kann ich eine Funktion schreiben, die das entfernt <p><p>und nur "Beispiel ive got a string" zurückgibt?
Ich möchte HTML-Tags aus einer Zeichenfolge entfernen. Angenommen, wir haben die Zeichenfolge:
<p> example ive got a string</P>
Wie kann ich eine Funktion schreiben, die das entfernt <p><p>und nur "Beispiel ive got a string" zurückgibt?
Antworten:
Am sichersten ist es, sich auf den Browser TextNode zu verlassen, um den Inhalt korrekt zu umgehen. Hier ist ein Beispiel:
function stripHTML(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( stripHTML('<p>some <span>content</span></p>') );
document.write( stripHTML('<script><p>some <span>content</span></p>') );
Beachten Sie hierbei, dass der Browser beim Zugriff auf die HTML-Zeichenfolgen ( innerHTML, outerHTML) den Sonderzeichen von TextNodes entgeht . Im Vergleich dazu führt der Zugriff auf Textwerte ( innerText, textContent) zu rohen Zeichenfolgen, was bedeutet, dass sie unsicher sind und XSS enthalten können.
Wenn Sie jQuery verwenden , ist die Verwendung .text()sicher und abwärtskompatibel. Siehe die anderen Antworten auf diese Frage.
Der einfachste Weg in reinem JavaScript, wenn Sie mit Browsern <= Internet Explorer 8 arbeiten, ist:
string.replace(/(<([^>]+)>)/ig,"");
Es gibt jedoch einige Probleme beim Parsen von HTML mit Regex, sodass dies keine sehr gute Sicherheit bietet. Außerdem werden nur HTML-Zeichen berücksichtigt, sodass es nicht vollständig xss-sicher ist.
console.log( stripHTML('<script><p>some <span>content</span></p>') );wird zurückkehren'<p>some <span>content</span></p>'
Verwenden Sie die .text()Funktion:
var text = $("<p> example ive got a string</P>").text();
Update : Wie Brilliand weiter unten ausführt, wird die Eingabezeichenfolge möglicherweise als CSS-Selektor behandelt, wenn sie keine Tags enthält und Sie Pech haben. Diese Version ist also robuster:
var text = $("<div/>").html("<p> example ive got a string</P>").text();
$("<div/>").html("<p> example ive got a string</P>").text()stattdessen.
$('<span>'+content+'</span>').text();
<script>Tags werden entfernt und Sie haben nur nochalert('hello');
Dies ist ein Beispiel, um das URL-Bild abzurufen und das p-Tag von einem Element zu entfernen.
Versuche dies:
$('#img').attr('src').split('<p>')[1].split('</p>')[0]
Sie können die vorhandene Split-Funktion verwenden
Ein einfaches und abgehacktes Beispiel:
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 ""
Das Beispiel soll Ihnen nur zeigen, wie die Aufteilung funktioniert.