dedlfix: Highlight Text

Beitrag lesen

Tach!

// Festlegung von Text und Suchstring:
    $text = 'variable lighte';
    $suchmuster_input = 'vari li';
    $suchmuster = htmlspecialchars($suchmuster_input);

Das ist die falsche Stelle für das htmlspecialchars(). Und selbst wenn der $text an der Stelle bereits HTML-gerecht aufgearbeitet sein sollte, ist das für ihn zu früh geschehen. Dann gibts dasselbe Problem, wie es der OP bereits hat. An dieser Stelle findet Verarbeitung statt und noch keine Ausgabe, also müssen/sollten Rohdaten vorliegen.

foreach ( $suchen AS $suche )
            $ersetzungen[$suche] = '<span class="highlight">'.$suche.'</span>';

Erst jetzt wird HTML produziert, also darf (und muss) auch erst jetzt das htmlspecialchars() zum Einsatz kommen.

Und wer jetzt aufgepasst hat, hat einen möglichen Denkfehler nicht übersehen. Es ist nicht bekannt, wo der $text herkommt. Ist es Rohtext aus einer sicheren Quelle oder eine Nutzereingabe? Selbst wenn es "sicherer" Text wäre, muss man die HTML-eigenen Zeichen berücksichtigen. Wenn man das nach der Ersetzung vornimmt, sind die Tag- und Attribut-Begrenzer des Markups der ersetzten Textstellen ebenfalls betroffen - was jedoch nicht sein soll. Hinterher den Text zu parsen, um festzustellen, was gut und was böse ist, ist mindestens mal aufwendig, wenn nicht gar unmöglich, weil nicht herauszufinden ist, was als Zeichen und was als HTML-Code beabsichtigt war.

Unter der Voraussetzung, dass der $text kein Markup enthält (sonst ist sowieso alles anders, weil das OP-Ersetzungsproblem bestehen bleibt), wäre dann doch die htmlspecialchars()-Idee eine mögliche Lösung, dann muss das aber vor dem Beginn der Ersetzungsprozedur mit $text _und_ $suchmuster_input (und nur da, nicht mehr in der foreach-Schleife) passieren. Jetzt sind beide Texte gleichmäßig "verunstaltet" und Minus mal Minus ergibt Plus, sozusagen - wenn ich nicht noch etwas übersehen habe.

dedlfix.