Joopi
[PHP] HTML-Tags decodieren - Druckversion

+- Joopi (https://forum.hermann-splitthoff.de)
+-- Forum: Wissenswertes (https://forum.hermann-splitthoff.de/forumdisplay.php?fid=1)
+--- Forum: Programmieren (https://forum.hermann-splitthoff.de/forumdisplay.php?fid=6)
+--- Thema: [PHP] HTML-Tags decodieren (/showthread.php?tid=408)



HTML-Tags decodieren - Joopi - 07-01-2024

In der letzten Zeit kommt es immer häufiger vor, dass ich HTML-Texte als Rohdaten in eine MySQL-Datenbank erfasse. Der Umgang mit HTML-Tags sind insgesamt nicht immer einfach, aber wenn man weiß, was man will, dann kann man sich sehr gut helfen.

Wenn HTML-Rohdaten nicht in einem Browser ausgeführt werden, dann gibt es unschöne Leseansichten bzw. die Daten sind nicht in einer MySQL-Datenbank erfassbar.

Wer einen HTML-Text außerhalb eines Browsers lesen will, der sollte tunlichst die HTML-Tags ausblenden.
Wer einen HTML-Text in eine Datenbank, z.B. MySQL, erfassen will, der muss diverse Sonderzeichen masieren, die sonst bei der Erfassung zu einem Fehler führen.

Fall 1
Ein HTML-Rohtext wird in der Konsole ausgegeben
Code:
$text = "<p>Das ist mein Text, der <strong>ausgegeben</strong> werden soll.</p>";
echo "Text 1 " . $text . "\n";
Ergebnis
Zitat:Text 1 <p>Das ist mein Text, der <strong>ausgegeben</strong> werden soll.</p>

Fall 2
Die HTML-Rohdaten werden gestript, um den Text lesbar zu machen
Code:
$text2 = "<p>Das ist mein Text, der <strong>ausgegeben</strong> werden soll.</p>";
$text2 = strip_tags($text2);
echo "Text 2 " . $text2 . "\n";
Ergebnis
Code:
Text 2 Das ist mein Text, der ausgegeben werden soll.

Fall 3 entfällt

Fall 4

Die HTML-Rohdaten werden als Entities umgewandelt
Code:
$text4 = "<p>Das ist mein Text, der <strong>ausgegeben</strong> werden soll.</p>";
$text4 = htmlentities($text4);
echo "Text 4 " . $text4 . "\n";
Ergebnis
Code:
Text 4 &lt;p&gt;Das ist mein Text, der &lt;strong&gt;ausgegeben&lt;/strong&gt; werden soll.&lt;/p&gt;

Fall 5

Insbesondere bei der Erfassung von HTML-Rohdaten in einer MySQL-Datenbank ist der folgende Befehl zu nutzen.
Code:
$text5 = "<p>Das ist mein Text, der <strong>ausgegeben</strong> werden soll.</p>";
$text5 = htmlspecialchars($text5);
echo "Text 5 " . $text5 . "\n";
Ergebnis
Code:
Text 5 &lt;p&gt;Das ist mein Text, der &lt;strong&gt;ausgegeben&lt;/strong&gt; werden soll.&lt;/p&gt;

Fall 6 entfällt

Fall 7
Die HTML-Entitäten werden wieder zurückgewandelt.
Code:
$text7 = "&lt;p&gt;Das ist mein Text, der &lt;strong&gt;ausgegeben&lt;/strong&gt; werden soll.&lt;/p&gt;";
$text7 = htmlspecialchars_decode($text7);
echo "Text 7 " . $text7 . "\n";
Ergebnis
Code:
Text 7 <p>Das ist mein Text, der <strong>ausgegeben</strong> werden soll.</p>

Wie wohl zu erkennen ist, kann man die HMTL-Tags bzw. die Zeichen, die nicht einfach so in eine MySQL-Datenbank erfasst werden können, ohne sie zu maskieren, so umwandeln, dass man damit arbeiten kann.

Der Fall 2 zeigt, dass die HTML-Rohdaten in einen gut lesbaren Fließtext umgewandelt werden können.
Die Entities können in die eine, aber auch wieder in die andere Richtung zurückgewandelt werden.

Ich nutze diese Erkenntnisse derzeit so, dass ich Mailheader aus eMails in eine MySQL-Datenbank speichere, aber auch die entsprechenden Mailtext. Die Mailtexte können in Plaintext und als HTML-Rohdaten vorliegen. Auch dann sind die obigen Erkenntnisse absolut wichtig, um die Datenbankerfassung zu ermöglichen.