HTML umwandeln zwischen Tags

Hallo Leute!

Ich habe einen Text, der mit htmlentities() behandelt wurde. Zwischen den HTML-Tags {html} und {/html} soll der Text allerdings mit html_entities_decode() wieder zurückgewandelt werden. Aber halt nur zwischen den Tags. Der Rest soll so bleiben.

Wie macht man so was?

Ich würde mich über eure Hilfe freuen!

Bitte was? Kannst du mal ein Beispiel posten?

Also im besten Falle ist es doch sowas, denke ich mal:

<p>&Ouml;de war die W&uuml;ste.<br/> 
Wir w&uuml;nschten uns Fl&uuml;ssigkeit und hei&szlig;e W&uuml;rste.</p>

oder aber:

&lt;p&gt;&Ouml;de war die W&uuml;ste.&lt;br/&gt;
Wir w&uuml;nschten uns Fl&uuml;ssigkeit und hei&szlig;e W&uuml;rste.&lt;/p&gt;

Im ersteren Falle ist das relaitv einfach, sofern es sich um korrektes XHTML handelt oder
wenigstens um HTML, wo man Elemente mit möglichem Inhalt immer konsequent schließt,
also keine Markierungssuppe. Ich meine, wenn es sich um korrektes HTML ohne Kurzsyntax
handelt, sollte folgendes auch gehen:
Da muß man ja nur nach > und < suchen und was dazwischen ist, konvertieren, man könnte
den Kram etwa in ein array zerteilen (nach > teilen) und dann in jedem array-Element den Teil
bis zum < auswählen und darauf die Konversion anwenden.

Das wird dann allerdings auch maskierte Attributwerte innerhalb von Markierungen wieder
demaskieren. Um das zu vermeiden, ist das Vorgehen etwas komplizierter, dazu müßte
man den Anfang einer Markierung suchen, von dort aus das Ende und danach erst möglichen
Text zur Konversion auswählen bis zur nächsten Anfangs- oder Endmarkierung, was immer
zuerst kommt.

Fehlerhafte Markierungssuppe ist ziemlich hoffnungslos automatisch zu konvertieren.

Beim zweiten Beispiel ist es insofern komplizierter, weil ja > und < auch maskiert im Text
vorkommen können. Ist das nicht der Fall, braucht man ja nur nach den maskierten
Konstruktionen teilen. Kann man das Vorkommen von maskierten > und < hingegen nicht
ausschließen, dürfte eine automatische Konversion gar nicht gehen oder allenfalls mit
zusätzlichen heuristischen Methoden, die raten, ob es sich um eine Markierung handelt oder
um Fließtext.

Was stört es wenn du deine {html} mitnimmst ? Die bleiben so. Die function heißt html_entity_decode .

Edit: Vermutlich sind sie aber nicht so drin wie du sie gezeigt hast.
Edit2: Hier mal ein Ansatz dies mit reg.Ausdrücken zu lösen (weil WE naht :slight_smile: :

//test-string
$erg = "schnulli <html>text <p> noch mehr text </p> </html> noch was dahinter";
$c = htmlentities($erg);  // mit htmlentities() behandelt
$reg = "/".htmlentities("<html>")."(.*)".htmlentities("<\/html>")."/";
$r = preg_match($reg,$c,$treffer);
//der Teil zwischen den HTML-Tags decodiert
$innerhtml = html_entity_decode($treffer[1]); 

Durch Modifizierung des reg.Ausdrucks hab ich auch Zugriff auf die Texte davor und danach.

Ich glaube ihr habt mich falsch verstanden :unamused:

Ich habe einen BB-Code-Parser gebastelt. Dieser „entschärft“ den String, der in HTML
umgewandelt werden soll, erst einmal mit htmlentities(). Anschließend werden die
BB-Codes mit Hilfe von Regulären Ausdrücken in HTML umgewandelt.

Es gibt verschiedene Tags, wie hier im Forum. Also B für Fett und so weiter.

Nun möchte ich dem Parser ein neues Tag hinzufügen. Also ein HTML-Tag.

Und alles was mit dem HTML-Tag ausgezeichnet wurde, soll dann halt nicht mit htmlentities()
„entschärft“ werden.

Ich hoffe, jetzt versteht ihr es :hail:

LG :bandit:

Hast du mein edit2 schon gelesen?

Problem gelöst… Lösung war der e-Modifikator:

preg_replace("#\[html\](.*)\[\/html\]#se", 'html_entity_decode("$1")');

Trotzdem danke!