Entfernen Sie HTML-Tags mit einfachem JavaScript aus dem Text

Lesezeit: 7 Minuten

Bryans Benutzeravatar
Bryan

Wie entferne ich HTML-Tags nur mit einfachem JavaScript aus einer Zeichenfolge, nicht mit einer Bibliothek?

Nickfs Benutzeravatar
nickf

myString.replace(/<[^>]*>?/gm, '');

  • Funktioniert nicht <img src=http://www.google.com.kh/images/srpr/nav_logo27.png onload="alert(42)" wenn Sie über injizieren document.write oder Verketten mit einer Zeichenfolge, die a enthält > vor der Injektion über innerHTML.

    – 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


Marks Benutzeravatar
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

Blacks Benutzeravatar
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

Victors Benutzeravatar
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

1454530cookie-checkEntfernen Sie HTML-Tags mit einfachem JavaScript aus dem Text

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy