string von html code säubern um Inhalt zu erkennen
Ingo
- php
Mein Problem ist folgendes. Ich habe einen String der einen HTML Inhalt hat. Manchmal ist der String auch leer, hat aber Rests von HTML Code drin. Wie ermittle ich ob der String leer ist.
Beispiel Sting
<p> </p><p> </p>12
Oder
<p> </p><p> </p>
Ich habe mehrere Ideen probiert. Zuerst mit trim und dann mit ctype_alnum aber nur Buchstaben oder nur Zahlen
Dann wieder mit trim und ich dacht mir ich zähle einfach mal mit strlen nach, aber auch wenn ich mit trim lösche habe ich angeblich bei
<p> </p><p> </p>12
noch 15 Zeichen.
Ingo
@@Ingo
Mein Problem ist folgendes. Ich habe einen String der einen HTML Inhalt hat.
Ja, genau das ist wohl dein Problem. Du machst aus EVA EAV.
Was ist dein eigentliches Problem? Warum hast du Markup in Strings?
😷 LLAP
Die Daten kommen aus einem Online Editor in einem String. Diesen würde ich gerne in meiner Datenbank speichern. Aber ich habe gesehen das manchmal eben nichts drin steht. Und genauso dann würde ich eben nichts abspeichern, also muss ich irgendwie den String so säubern, das klar ist, das auch wirklich nichts drin ist Außer HTML Kommandos
Ingo
Hallo Ingo,
strip_tags?
Grüße, Martl
Hallo,
strip_tags?
war auch mein erster Gedanke. Aber ich habe noch nicht ganz verstanden, was Ingo wirklich erreichen will.
Live long and pros healthy,
Martin
Sorry, da habe ich beim Verfassen gepfuscht:
ich habe meine String mit
strip_tags
trim
behandelt. Dann
strlen
ausgeführt uns es kommt 12 herraus, aber eigentlich sollte 2 da stehen
<p> </p><p> </p>12
Hallo Ingo,
passt doch: strlen(' ') = 12 Zeichen.
Grüße, Martl
Hallo Ingo,
du brauchst html_entity_decode, um HTML Symbole wie   in echte Zeichen zu übersetzen.
ist das "non breaking space", Zeichencode 160 (0xa0).
Und dann beginnen die Probleme.
Du musst html_entity_decode sagen, mit welchem Encoding sie das tun soll. Wenn Du das nicht tust, wird das default_charset verwendet, das für PHP eingestellt ist, und das ist seit PHP 5.6 per Default UTF-8. Und im Normalfall ist das auch richtig so.
Nur - wenn html_entity_decode einen in UTF-8 codierten String liefert, wird aus eine UTF-8 Zeichensequenz 194, 160 (\xC2 \xA0), und das bedeutet: Du kannst trim() nicht mehr verwenden, um dieses Zeichen zu entfernen. trim funktioniert nur für Single-Byte Zeichensätze. Du bräuchtest mb_trim - was es aber nicht gibt. D.h. du musst die trim-Operation mit einer Regex nachbauen. Die für deinen Fall einfachste Lösung ist, einfach alle Leerzeichen zu löschen, nicht nur die am Anfang und Ende:
$plainText = strip_tags($editText);
$decoded = html_entity_decode($plainText, ENT_COMPAT | ENT_HTML5, 'ISO-8859-1');
$trimmed = mb_ereg_replace('\s+', '', $text);
Die mb_ereg Funktionen erkennen das   Leerzeichen als Whitespace, d.h. das \s Symbol ersetzt es durch einen Leerstring.
Rolf