Das Problem ist nicht preg_replace_callback, denn das escaped von sich aus gar nichts, das Problem liegt daran, dass du mit htmlentities escapesd und dann diesen escapeten String der Funktion highlight_string übergibst welche nun mal von sich aus wieder escaped!
Genau dieser Teil ist schuld:
Zitat:
create_function("\$suchergebniss", "return highlight_string(\"<?php \".\$suchergebniss[1].\" ?>\", TRUE);")
Um das zu korrigieren musst du highlight_string den nicht escapeten String übergeben, das kannst du machen in dem du einfach die Variabel $suchergebniss in dieser zur Laufzeit erzeugten Funktion per html_entity_decode() zurückumwandelst.
Jedoch würde sich dann der Lesbarkeit halber eine externe Funktion einer zur Laufzeit generierten Funktion eher anbieten besonders im nächsten Punkt.
Bei dem Ergebnis dass du von highlight_string zurückbekommst würde ich noch das <?php und ?> wegmachen sonst steht später mehr drin als der User eigentlich eingegeben hat, kannst du entweder mit regulären Ausdrücken oder in dem du schaust was da am Ende rauskommst und die ersten x Zeichen löscht (denn das sollte sich ja nicht ändern) und die letzten y Zeichen eben.
Du könntest natürlich auch das htmlentities nur auf das anwenden was später nicht der Funktion highlight_string vorgesetzt wird. Das könntest du mit regulären Ausdrücken erreichen (gerade wieder mit preg_replace_callback) aber da habe ich gerade keine Lust einen entsprechenden Ausdruck oder Code zu erstellen.
Ich finde die Lösung mit highlight_string sowieso eher suboptimal du könntest ggf. deinen eigenen Syntax-Highlighter bastellen das ist zwar etwas mehr Aufwand bringt dir aber einige Vorteile: kein zusätzliches einfügen von <?php und ?> nötig, ggf. kein entfernen dieser oder dem eingefügt lassen von Dingen die der User gar nicht eingegeben hat, Nutzung von Klassen und CSS (leichte Anpassbarkeit des Aussehens per CSS), leichte Erweiterbarkeit auf andere
Sprachen (kann die Funktion überhaupt HTML, CSS oder andere highlighten?), keine Probleme mit dem escapen, genau das richtige um reguläre Ausdrücke zu erlernen (was du ja gerade vor hast), ...
Wenn du das nicht selber machen kannst oder willst, kannst du auch schauen ob es sowas ggf. zur freien Verwendung bereits gibt und das nutze. Selbst in den Kommentaren auf dieser Seite http://de2.php.net/manual/de/function.highlight-string.php gibt es einiges, ob da was dabei ist was man gebrauchen kann weis ich jedoch nicht.