Das ist meist so. Grad solche Fehler, dass einzelne Zeichen falsch dargestellt werden, werden häufig durch einen Fehler bei der Zeicheneingabe ausgelöst. Auch beliebt ist immer strip_slashes NACH dem Aufruf von GeSHi auszuführen und sich dann zu wundern, warum der gesamte Quelltext ein String ist
Bzgl. den Escapes von
HTML: Alles was irgendwie gefährlich ist (oder beim Verarbeiten stört) wird mit einer abgewandelten htmlspecialchars-Funktion escaped (Alte PHP-Versionen hatten da mal nen Bug, der Code-Execution zuließ). Zudem dient die Escapes bei GeSHi intern zur Markierung von von bereits hervorgehobenen Dingen. Der einzige Angriff wäre also möglich, wenn man dem User die Möglichkeit gibt, JEGLICHES CSS anzugeben. Das ist aber ein Problem der Vorgehensweise und hier kann der Anwender wesentlich besser agieren, als GeSHi, da man > niccht per-se filtern kann in CSS (Hat dort nämlich durchaus Berechtigung).