Wie entferne ich HTML-Tags nur mit einfachem JavaScript aus einer Zeichenfolge, nicht mit einer Bibliothek?
Entfernen Sie HTML-Tags mit einfachem JavaScript aus dem Text
Bryan
nickf
myString.replace(/<[^>]*>?/gm, '');
-
Funktioniert nicht
<img src=http://www.google.com.kh/images/srpr/nav_logo27.png onload="alert(42)"
wenn Sie über injizierendocument.write
oder Verketten mit einer Zeichenfolge, die a enthält>
vor der Injektion überinnerHTML
.– Mike Samuel
24. Dezember 2010 um 15:07 Uhr
-
@PerishableDave, ich stimme zu, dass das
>
bleibt im zweiten übrig. Es besteht jedoch keine Injektionsgefahr. Die Gefahr entsteht durch<
links im ersten, was dazu führt, dass sich der HTML-Parser in einem anderen Kontext als befindet Datenstatus wenn der zweite beginnt. Beachten Sie, dass es keinen Übergang vom Datenstatus an gibt>
.– Mike Samuel
22. September 2011 um 18:04 Uhr
-
@MikeSamuel Haben wir uns schon für diese Antwort entschieden? Naiver Benutzer hier, bereit zum Kopieren und Einfügen.
– Ziggy
7. Mai 2013 um 18:32
-
Ich glaube auch, dass dies völlig verwirrend ist, wenn man so etwas gibt
<button onClick="dostuff('>');"></button>
Bei korrekt geschriebenem HTML müssen Sie dennoch berücksichtigen, dass irgendwo im zitierten Text eines Attributs ein Größer-als-Zeichen stehen könnte. Außerdem möchten Sie den gesamten darin enthaltenen Text entfernen<script>
Zumindest Tags.– Jonathan
18. August 2013 um 2:37
-
@AntonioMax, ich habe diese Frage bis zum Überdruss beantwortet, aber zum Kern Ihrer Frage, weil Sicherheitskritischer Code sollte nicht kopiert und eingefügt werden. Sie sollten eine Bibliothek herunterladen und sie auf dem neuesten Stand und gepatcht halten, damit Sie vor kürzlich entdeckten Schwachstellen und Änderungen in Browsern geschützt sind.
– Mike Samuel
27. November 2013 um 16:04
-
Es ist erwähnenswert, dass diese Lösung nur im Browser funktioniert.
– kris_IV
9. Februar 2018 um 8:08
-
Dabei handelt es sich nicht um Strip-Tags, sondern eher um PHP htmlspecialchars(). Für mich immer noch nützlich.
– Daantje
14. September 2018 um 19:38 Uhr
-
Beachten Sie, dass dadurch auch Leerzeichen am Anfang des Textes entfernt werden.
– Raine Revere
11. April 2019 um 15:48
-
Außerdem wird nicht versucht, HTML mithilfe von Regex zu analysieren
– törzsmókus
22. Januar 2021 um 10:53
-
Dies sollte die akzeptierte Antwort sein, da dies der sicherste und schnellste Weg ist
– the_previ
6. Oktober 2021 um 12:00 Uhr
Markieren
Einfachster Weg:
jQuery(html).text();
Dadurch wird der gesamte Text aus einer HTML-Zeichenfolge abgerufen.
-
Wir verwenden für Projekte immer jQuery, da unsere Projekte ausnahmslos viel Javascript enthalten. Deshalb haben wir keine Massen hinzugefügt, sondern den vorhandenen API-Code genutzt …
– Markieren
14. März 2012 um 16:31 Uhr
-
Sie verwenden es, das OP jedoch möglicherweise nicht. Die Frage betraf Javascript, NICHT JQuery.
– Rafael Herscovici
14. März 2012 um 16:55 Uhr
-
Es ist immer noch eine nützliche Antwort für Leute, die das Gleiche tun müssen wie das OP (wie ich) und denen es nichts ausmacht, jQuery zu verwenden (wie ich), ganz zu schweigen davon, dass es für das OP nützlich gewesen sein könnte, wenn sie über die Verwendung nachgedacht hätten jQuery. Der Zweck der Website besteht darin, Wissen zu teilen. Denken Sie daran, dass es eine abschreckende Wirkung haben kann, wenn Sie nützliche Antworten ohne triftigen Grund abwerten.
– acjay
29. November 2012 um 1:32
-
@Dementic Erstaunlicherweise finde ich die Threads mit mehreren Antworten am nützlichsten, da oft eine sekundäre Antwort genau meine Bedürfnisse erfüllt, während die primäre Antwort den allgemeinen Fall erfüllt.
– Eric G
14. Dezember 2012 um 19:11 Uhr
-
Das funktioniert nicht, wenn ein Teil der Zeichenfolge nicht in ein HTML-Tag eingeschlossen ist. Beispiel: „Fehler: Bitte geben Sie eine gültige E-Mail-Adresse ein“ gibt nur „Fehler:“ zurück.
– Aamir Afridi
5. Februar 2013 um 11:10 Uhr
Schwarz
Als Erweiterung der jQuery-Methode, wenn Ihre Zeichenfolge möglicherweise kein HTML enthält (z. B. wenn Sie versuchen, HTML aus einem Formularfeld zu entfernen)
jQuery(html).text();
gibt eine leere Zeichenfolge zurück, wenn kein HTML vorhanden ist
Verwenden:
jQuery('<p>' + html + '</p>').text();
stattdessen.
Aktualisieren:
Wie in den Kommentaren erwähnt, führt diese Lösung unter bestimmten Umständen das darin enthaltene Javascript aus html
wenn der Wert von html
von einem Angreifer beeinflusst werden könnte, verwenden Sie eine andere Lösung.
-
Wir verwenden für Projekte immer jQuery, da unsere Projekte ausnahmslos viel Javascript enthalten. Deshalb haben wir keine Massen hinzugefügt, sondern den vorhandenen API-Code genutzt …
– Markieren
14. März 2012 um 16:31 Uhr
-
Sie verwenden es, das OP jedoch möglicherweise nicht. Die Frage betraf Javascript, NICHT JQuery.
– Rafael Herscovici
14. März 2012 um 16:55 Uhr
-
Es ist immer noch eine nützliche Antwort für Leute, die das Gleiche tun müssen wie das OP (wie ich) und denen es nichts ausmacht, jQuery zu verwenden (wie ich), ganz zu schweigen davon, dass es für das OP nützlich gewesen sein könnte, wenn sie über die Verwendung nachgedacht hätten jQuery. Der Zweck der Website besteht darin, Wissen zu teilen. Denken Sie daran, dass es eine abschreckende Wirkung haben kann, wenn Sie nützliche Antworten ohne triftigen Grund abwerten.
– acjay
29. November 2012 um 1:32
-
@Dementic Erstaunlicherweise finde ich die Threads mit mehreren Antworten am nützlichsten, da oft eine sekundäre Antwort genau meine Bedürfnisse erfüllt, während die primäre Antwort den allgemeinen Fall erfüllt.
– Eric G
14. Dezember 2012 um 19:11 Uhr
-
Das funktioniert nicht, wenn ein Teil der Zeichenfolge nicht in ein HTML-Tag eingeschlossen ist. Beispiel: „Fehler: Bitte geben Sie eine gültige E-Mail-Adresse ein“ gibt nur „Fehler:“ zurück.
– Aamir Afridi
5. Februar 2013 um 11:10 Uhr
Sieger
Konvertieren von HTML für den E-Mail-Versand mit reinem Text, wobei die Hyperlinks (ein href) intakt bleiben
Die obige von hypoxide gepostete Funktion funktioniert gut, aber ich war auf der Suche nach etwas, das im Grunde genommen HTML konvertiert, das in einem Web-RichText-Editor (z. B. FCKEditor) erstellt wurde, und das gesamte HTML löscht, aber alle Links belässt, da ich sowohl das HTML als auch das HTML haben wollte die Nur-Text-Version, um das Erstellen der richtigen Teile einer STMP-E-Mail (sowohl HTML als auch Nur-Text) zu erleichtern.
Nachdem ich und meine Kollegen lange bei Google gesucht hatten, kamen wir mithilfe der Regex-Engine in Javascript auf Folgendes:
str="this string has <i>html</i> code i want to <b>remove</b><br>Link Number 1 -><a href="http://www.bbc.co.uk">BBC</a> Link Number 1<br><p>Now back to normal text and stuff</p>
";
str=str.replace(/<br>/gi, "\n");
str=str.replace(/<p.*>/gi, "\n");
str=str.replace(/<a.*href="https://stackoverflow.com/questions/822452/(.*?)".*>(.*?)<\/a>/gi, " $2 (Link->$1) ");
str=str.replace(/<(?:.|\s)*?>/g, "");
Die str
Variable beginnt so:
this string has <i>html</i> code i want to <b>remove</b><br>Link Number 1 -><a href="http://www.bbc.co.uk">BBC</a> Link Number 1<br><p>Now back to normal text and stuff</p>
und nachdem der Code ausgeführt wurde, sieht es so aus:-
this string has html code i want to remove
Link Number 1 -> BBC (Link->http://www.bbc.co.uk) Link Number 1
Now back to normal text and stuff
Wie Sie sehen, wurde der gesamte HTML-Code entfernt und der Link beibehalten, wobei der verlinkte Text noch intakt ist. Auch ich habe das ersetzt <p>
Und <br>
Tags mit \n
(Neuzeilenzeichen), sodass eine Art visuelle Formatierung beibehalten wurde.
Um das Linkformat zu ändern (z. B. BBC (Link->http://www.bbc.co.uk)
) Bearbeiten Sie einfach die $2 (Link->$1)
Wo $1
ist die href-URL/URI und die $2
ist der verlinkte Text. Da sich die Links direkt im Klartext befinden, konvertieren die meisten SMTP-Mail-Clients diese, sodass der Benutzer darauf klicken kann.
Ich hoffe, Sie finden das nützlich.
-
„ “ wird nicht verarbeitet.
– Rose Nettoyeur
30. November 2018 um 12:38 Uhr
-
Obligatorischer Vorbehalt: stackoverflow.com/a/1732454/501765
– törzsmókus
22. Januar 2021 um 10:51 Uhr