Rolf B: string von html code säubern um Inhalt zu erkennen

Beitrag lesen

Hallo Ingo,

du brauchst html_entity_decode, um HTML Symbole wie &nbsp 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 &nbsp Leerzeichen als Whitespace, d.h. das \s Symbol ersetzt es durch einen Leerstring.

Rolf

--
sumpsi - posui - obstruxi