Liebe Selfer,
ich filtere HTML-Tags heraus, um sie durch eine eigene Form von BB-Code zu ersetzen. Das funktioniert auch ganz gut, nur bei einem speziellen Tag (<sup>) gibt es Schwierigkeiten. Bei <sup> wird _immer_ das erste öffnende und das letzte schließende Tag im Text ersetzt. Eventuell dazwischen vorhandene öffnende und schließende <sup>-Tags werden belassen. Hier mein Script (Ausschnitt):
// Schriftformatierungen umwandeln
$formatierungen = array("unterstrichen" => "u", "fett" => "b", "kursiv" => "i", "tiefgestellt" => "sub", "hochgestellt" => "sup");
foreach($formatierungen as $formatierung => $tag)
{
$suchmuster = '/(?i)<'.$tag.'>(.*)(?<!</'.$tag.'>)</'.$tag.'>/';
$ersetzung = '['.$formatierung.':\1]';
$quelltext = preg_replace($suchmuster, $ersetzung, $quelltext);
}
Dieses Script macht Folgendes: Aus "<b>fetter</b> Text" wird "[fett:fetter] Text". Aus "<i>kursiver</i> Text <i>mit</i> Anfang" wird "[kursiv:kursiver] Text [kursiv:mit] Anfang".
Aber: aus "Test-<sup>schrift</sup> mit zwei<sup>hoch 4</sup>" wird leider "Test-[hochgestellt:schrift</sup> mit zwei<sup>hoch 4]".
Warum? Meine Foreach-Schleife und mein Suchmuster funktionieren doch bei allen anderen Tags tadellos! Was ist an <sup> so anders?
Wer weiß Rat? Ich bin für jede Idee dankbar, denn ich komme hier einfach nicht weiter.
Liebe Grüße aus Ellwangen,
Felix Riesterer.