Wenn Sie IE6 nicht unterstützen müssen, versuchen Sie es vielleicht direkt mit DOMParser, da dies keine Bilder herunterlädt und keine Skripte ausführt.
function stripHtml(dirtyString) {
const doc = new DOMParser().parseFromString(dirtyString, 'text/html');
return doc.body.textContent || '';
}
Wenn Sie nun etwas wie stripHtml("<img onerror="alert(\"kann beliebigen JS-Code ausführen\")"" src="bogus">"); ausführen, verursacht dies keine Probleme, während der Browser immer noch die Arbeit erledigt.
Danke! Ein kleiner Hinweis zu dem Regexp: das "i" ist hier nicht nötig, da keine Zeichen vorhanden sind, die Groß- und Kleinschreibung berücksichtigen müssten. Es tut aber trotzdem genau das, was Sie wollen.
Ich habe Ihr Kontaktformular gesehen und ich muss sagen, ich liebe es! Haben Sie ein Tutorial oder so etwas? Es ist ein wunderbares :)^ Ich hoffe, Neuigkeiten von Ihnen zu hören,
das /i für Groß-/Kleinschreibung ist auf jeden Fall empfehlenswert. Bei Verwendung von contenteditable erzeugt IE Großbuchstaben, während Mozilla nur Kleinbuchstaben erzeugt. Um diese zu entfernen, benötigen Sie eine Groß-/Kleinschreibungsunabhängigkeit.
DScout, das ist falsch. Es gibt keine alphabetischen Zeichen in dem regulären Ausdruck – der Modifikator für Groß-/Kleinschreibung beeinflusst daher nichts.
var text = ‘[$ ssIncludeXml(docName,”wcm:root/wcm:element[@name=’innerpage_content’]/text()”) $]’; var StrippedString = text.replace(/(]+)>)/ig,"";
wobei „[$ ssIncludeXml(docName,”wcm:root/wcm:element[@name=’innerpage_content’]/text()”) $]“ ein Idoc-Skript ist, das einen HTML-Block aus einem Platzhalter holt. Aber ich bekomme einen Fehler „unterbrochene Zeichenketten-Literal“ in der ersten Zeile.
Was ich tun möchte, ist, alle HTML-Tags zu entfernen oder zu streifen und reinen Text aus dieser Markierung zu erhalten.
Bitte lassen Sie mich wissen, wenn es eine Lösung gibt.
Ich habe mich gefragt, wie dies implementiert würde, wenn ich nur die href-Tags aus einem Text entfernen möchte, anstatt alle Tags zu entfernen? Ich versuche, eine Textseite von einer Website abzurufen, möchte aber nur den reinen Text mit den Formatierungs-Tags (p, ul, li). Ich hoffe, das ergibt Sinn, danke im Voraus.
\S bedeutet Nicht-Leerzeichen, und ^> bedeutet Nicht-Größer-als, also stellt Ihr modifizierter Regex nur sicher, dass einzelne Zeichen-Tags nicht ersetzt werden.
Ich habe dasselbe mit JavaScript Regulären Ausdrücken entwickelt. Es entfernt alle HTML-Tags, außer denen, die der Benutzer in der Ausschlussliste angegeben hat. Der Quellcode ist auch auf GitHub verfügbar Prüfen Sie hier. HTML Tag Stripper
Ich habe eine Funktion zusammengestellt, die das Beibehalten einiger Tags ermöglicht, ähnlich wie die PHP-Funktion funktioniert.
Wie bei PHP hat dies die folgenden beiden Vorbehalte:
Da strip_tags() das HTML nicht tatsächlich validiert, können teilweise oder fehlerhafte Tags dazu führen, dass mehr Text/Daten entfernt werden als erwartet.
und
Diese Funktion ändert keine Attribute an den von Ihnen erlaubten Tags unter Verwendung von allowable_tags, einschließlich der style- und onmouseover-Attribute, die ein boshafter Benutzer missbrauchen könnte, wenn er Text postet, der anderen Benutzern angezeigt wird.
/**
* Native javascript function to emulate the PHP function strip_tags.
*
* @param {string} str The original HTML string to filter.
* @param {array|string} allowable_tags A tag name or array of tag
* names to keep. Intergers, objects, and strings that don't follow the
* standard tag format of a letter followed by numbers and letters will
* be ignored. This means that invalid tags will also be removed.
* @return {string} The filtered HTML string.
*/
function strip_tags(str, allowable_tags) {
allowable_tags = [].concat(allowable_tags);
var keep = '';
allowable_tags.forEach(function(tag) {
if (('' + tag).match(/^[a-z][a-z0-9]+$/i))
keep += (keep.length ? '|' : '') + tag;
} );
return str.replace(new RegExp(']+>', 'ig'), '');
}
Zusätzliche Prüfungen wurden implementiert, um ungültige Tags nach Möglichkeit zu verhindern, indem sichergestellt wird, dass die Eröffnung jedes Tags mit einem potenziellen Tag-Namen beginnt; dies berücksichtigt keine größeren Symbole innerhalb von Attributen. Kommentare werden beibehalten, können aber mit einem ähnlichen Regex entfernt werden.
var no_comments = strip_tags('This is not a comment. ').replace(//, '');
Ich hasse es, Sie zu stören, aber es sieht so aus, als wäre die letzte Zeile Ihrer Funktion irgendwie beschädigt worden – das ist kein gültiger Regex. Können Sie das vielleicht beheben?
Hallo zusammen! Ich habe gerade ein JavaScript-Problem mit der Regex / replace Funktion, die Sie hier erwähnen. Ich möchte einen Text um einige seiner HTML-Tags bringen.
Aber ich möchte die und Tags behalten und habe diese beiden separaten Funktionen gefunden, die für mich funktioniert haben.
var regex = / <(?! \ s * \ /? \ s * p \ b) [^>] *> / gi; // deletes all HTML except
var regex = / <(?! br \ s * \ /?) [^>] +> / gi; // deletes all HTML except for
Wissen Sie, wie man die beiden Bedingungen in einer kombiniert?
Hallo Sir. Bitte, ich möchte wissen, ob ich Hilfe von Ihnen bekommen kann. Ich habe eine Frontend-Einreichung, bei der Benutzer ihren Artikel teilen können, aber ich möchte alle Links im Formular entfernen. Gibt es eine Möglichkeit, dies nur für die von Benutzern eingereichten Beiträge zu tun, die keine Administratoren sind? Danke Ich habe bereits das Frontend-Post-Setup und es funktioniert richtig, außer dem, wonach ich Hilfe suche.
Dein Skript funktioniert super! Prost!
das ist so cool, ich mag es
function strip(html)
{
var tmp = document.createElement("DIV");
tmp.innerHTML = html;
return tmp.textContent || tmp.innerText;
}
Dies war für meine Bedürfnisse noch besser. Keine Probleme mit Sonderzeichen etc…
Das ist eine schreckliche Ratschlag!
Wenn aus irgendeinem Grund (wie böswillige Absicht von Benutzern) das HTML-Argument ein Skript-Tag enthält, haben Sie jetzt XSS-Angriffe ermöglicht!!!
Verwenden Sie nicht das DOM für etwas, das es nicht erfordert.
Außerdem ist das DOM *wirklich* langsam.
Diese Lösung ist großartig für die Verwendung von innerem Inhalt aus einem Absatz in einem JS-Alert-Fenster – sie entfernt nbsp und em effektiv,
danke
Pushpinder,
Wunderbar. Hat super funktioniert
Wenn Sie IE6 nicht unterstützen müssen, versuchen Sie es vielleicht direkt mit DOMParser, da dies keine Bilder herunterlädt und keine Skripte ausführt.
Wenn Sie nun etwas wie
stripHtml("<img onerror="alert(\"kann beliebigen JS-Code ausführen\")"" src="bogus">");ausführen, verursacht dies keine Probleme, während der Browser immer noch die Arbeit erledigt.Einzeiler
Hier ist ein **Einzeiler**, falls Sie ohnehin **_jQuery_** verwenden
txt=$(document.createElement("DIV")).html('<b>Hi</b>').text();Hallo!!!..das ist so lächerlich..
Danke für das tolle Beispiel
Danke, das tut genau, was ich brauche (und so prägnant, auch!)
Danke! Ein kleiner Hinweis zu dem Regexp: das "i" ist hier nicht nötig, da keine Zeichen vorhanden sind, die Groß- und Kleinschreibung berücksichtigen müssten. Es tut aber trotzdem genau das, was Sie wollen.
Schön, aber die Klammern sind unnötig.
.replace(/<[^>]+>/ig,"");
Danke
Hallo :)
Ich habe Ihr Kontaktformular gesehen und ich muss sagen, ich liebe es!
Haben Sie ein Tutorial oder so etwas? Es ist ein wunderbares :)^
Ich hoffe, Neuigkeiten von Ihnen zu hören,
Ein französischer Leser,
Florian
Danke für das Skript :)
@Ricard: Wenn Sie eine Kopie des Kontaktformulars machen möchten, schauen Sie sich einfach den Quellcode an oder speichern Sie diese Seite lokal ;)
wunderschöne Seite danke für das tolle Beispiel
das /i für Groß-/Kleinschreibung ist auf jeden Fall empfehlenswert.
Bei Verwendung von contenteditable erzeugt IE Großbuchstaben, während Mozilla nur Kleinbuchstaben erzeugt. Um diese zu entfernen, benötigen Sie eine Groß-/Kleinschreibungsunabhängigkeit.
DScout, das ist falsch. Es gibt keine alphabetischen Zeichen in dem regulären Ausdruck – der Modifikator für Groß-/Kleinschreibung beeinflusst daher nichts.
Hallo
Ich habe folgenden Code
var text = ‘[$ ssIncludeXml(docName,”wcm:root/wcm:element[@name=’innerpage_content’]/text()”) $]’;
var StrippedString = text.replace(/(]+)>)/ig,"";
wobei „[$ ssIncludeXml(docName,”wcm:root/wcm:element[@name=’innerpage_content’]/text()”) $]“
ein Idoc-Skript ist, das einen HTML-Block aus einem Platzhalter holt. Aber ich bekomme einen Fehler „unterbrochene Zeichenketten-Literal“ in der ersten Zeile.
Was ich tun möchte, ist, alle HTML-Tags zu entfernen oder zu streifen und reinen Text aus dieser Markierung zu erhalten.
Bitte lassen Sie mich wissen, wenn es eine Lösung gibt.
Danke
funktioniert super, aber entfernt keine Leerzeichen….
Danke! Es war sehr nützlich für mich und ich denke, es ist nützlich für alle.
Nochmals vielen Dank!
Ja, diese Lösung hat alle Arten von HTML, Absätzen, Zeilenumbrüchen, Inline-Stilen usw. usw. entfernt.
Das funktioniert nicht für IE. Bitte stellen Sie eine Lösung zum Entfernen von Tags in JavaScript bereit, die für alle Browser funktioniert.
Danke für dieses Skript
Es funktioniert super
Ich versuche es auf
var message;
aber es funktioniert nicht und sagt
kann Methode „replace“ von undefined nicht aufrufen
Ich habe mich gefragt, wie dies implementiert würde, wenn ich nur die href-Tags aus einem Text entfernen möchte, anstatt alle Tags zu entfernen? Ich versuche, eine Textseite von einer Website abzurufen, möchte aber nur den reinen Text mit den Formatierungs-Tags (p, ul, li).
Ich hoffe, das ergibt Sinn, danke im Voraus.
Das war ausgezeichnet! Danke!
fehlt dein „\S“ ... oder nicht?
\S bedeutet Nicht-Leerzeichen, und ^> bedeutet Nicht-Größer-als, also stellt Ihr modifizierter Regex nur sicher, dass einzelne Zeichen-Tags nicht ersetzt werden.
Großartig! Danke!
Vielen Dank,
Es funktioniert gut.
Cool! Das funktioniert perfekt...
Was ist mit < b r / > oder < h r / > (den selbstschließenden Tags)?
Cool……Schönes Beispiel.
Sieht so aus, als würde „newInput“ gar nichts tun? Entweder ist es überflüssig oder es gibt ein Problem mit dem Code.
Ich habe dasselbe mit JavaScript Regulären Ausdrücken entwickelt.
Es entfernt alle HTML-Tags, außer denen, die der Benutzer in der Ausschlussliste angegeben hat.
Der Quellcode ist auch auf GitHub verfügbar
Prüfen Sie hier. HTML Tag Stripper
Schön, aber nicht so sicher… Ich würde eher jQuery verwenden
$("<div/>").text('<img alt="a>b" src="a_b.gif" />').text();document.body.innerText
<a onclick=”return a > b”> ~ Fehler
Aber dieser Code funktioniert nicht gut mit HTML-Tabelleninhalt.
Wie kann ich alle Tags außer Anker- und img-Tags entfernen?
Sie können die Groß-/Kleinschreibung und die Klammern problemlos weglassen
mit jQuery
jQuery(stringWithTags).text()
jQuery(stringWithTags).text();
das ist es, was ich will. danke…
funktioniert nicht mit AngularJS.
Wahrscheinlich die einfachste Lösung, die ich online gefunden habe. Vielen Dank dafür. Hat einwandfrei funktioniert!
das ist die beste Lösung, die ich gefunden habe
http://phpjs.org/functions/strip_tags/
das ist äquivalent zur PHP strip_tags Funktion
Sieht niemand, wie diese Lösung diesen Text stark beeinflusst
Gerundete Beträge < 3 sind für Menschen einfacher in Berechnungen zu verwenden, da sie so winzig sind als Zahlen, die >=3 sind
Wird: Gerundete Beträge =3
Diese ist besser; phpjs.org/functions/strip_tags/
Sichere Methode, das DOM zum Entfernen von HTML zu verwenden.
Ich habe eine Funktion zusammengestellt, die das Beibehalten einiger Tags ermöglicht, ähnlich wie die PHP-Funktion funktioniert.
Wie bei PHP hat dies die folgenden beiden Vorbehalte:
und
/** * Native javascript function to emulate the PHP function strip_tags. * * @param {string} str The original HTML string to filter. * @param {array|string} allowable_tags A tag name or array of tag * names to keep. Intergers, objects, and strings that don't follow the * standard tag format of a letter followed by numbers and letters will * be ignored. This means that invalid tags will also be removed. * @return {string} The filtered HTML string. */ function strip_tags(str, allowable_tags) { allowable_tags = [].concat(allowable_tags); var keep = ''; allowable_tags.forEach(function(tag) { if (('' + tag).match(/^[a-z][a-z0-9]+$/i)) keep += (keep.length ? '|' : '') + tag; } ); return str.replace(new RegExp(']+>', 'ig'), ''); }Zusätzliche Prüfungen wurden implementiert, um ungültige Tags nach Möglichkeit zu verhindern, indem sichergestellt wird, dass die Eröffnung jedes Tags mit einem potenziellen Tag-Namen beginnt; dies berücksichtigt keine größeren Symbole innerhalb von Attributen. Kommentare werden beibehalten, können aber mit einem ähnlichen Regex entfernt werden.
var no_comments = strip_tags('This is not a comment. ').replace(//, '');Hallo!
Ich hasse es, Sie zu stören, aber es sieht so aus, als wäre die letzte Zeile Ihrer Funktion irgendwie beschädigt worden – das ist kein gültiger Regex. Können Sie das vielleicht beheben?
Hallo zusammen! Ich habe gerade ein JavaScript-Problem mit der Regex / replace Funktion, die Sie hier erwähnen.
Ich möchte einen Text um einige seiner HTML-Tags bringen.
Dazu verwende ich die Funktion
Hier werden alle Tags gelöscht.
Aber ich möchte die und Tags behalten und habe diese beiden separaten Funktionen gefunden, die für mich funktioniert haben.
Wissen Sie, wie man die beiden Bedingungen in einer kombiniert?
Dies entfernt nicht nur die problematischen Zeichen, sondern auch den Rest des Textes.
Welches HTML bearbeiten Sie?
Warum verwenden Sie nicht Element.textContent?
Genau das, was ich brauchte… Danke
.replace(/(<([^> ]+)>)/ig, "")ein Leerzeichen nach dem Chevron hinzugefügt, um Dinge wie " < heey > " zu ermöglichen
Ein weiterer Tipp: Nutzen Sie die Fähigkeit des Browsers, Tags zu entfernen.
Hallo Sir. Bitte, ich möchte wissen, ob ich Hilfe von Ihnen bekommen kann.
Ich habe eine Frontend-Einreichung, bei der Benutzer ihren Artikel teilen können, aber ich möchte alle Links im Formular entfernen.
Gibt es eine Möglichkeit, dies nur für die von Benutzern eingereichten Beiträge zu tun, die keine Administratoren sind?
Danke
Ich habe bereits das Frontend-Post-Setup und es funktioniert richtig, außer dem, wonach ich Hilfe suche.