Also, ich schreibe derzeit ein Script, dass mir Codes in HTML und wieder zurück umwandelt. Das hat beim Schreiben des Scripts immer funktioniert, allerdings nicht mehr, wenn ich das Script in mein Newssystem einbaue.
Achtung:Ich habe meine eigenen PHP-Tags soweit wie nötig auf [/php.] geaendert, da sonst das Forum hier nicht den Code richtig darstellen kann.
Das ist aber beabsichtigt und kein Fehler! Habe ich in der Regel gemacht, indem ich da nen Punkt reingesetzt habe.
Auszug aus dem Text-Objekt (auf das wesentliche gekürzt):
public function texttohtml($text){
preg_match_all('#\[php\s*(.*)\s*\]\s*((?U).*)\s*\[\/php.\]#s', $text, $array);
# Alle [php (Titel)] (Code) [/php.] finden
for ($i=0; $i<count($array[0]); $i++)
$text = preg_replace('#'.preg_quote($array[0][$i]).'#', $array[1][$i].'('.$i.'', $text);
# user-158n ersetzen!
$text = htmlentities($text);
$text = str_replace("\r\n", '<br>', $text);
# Andere Textstellen umwandeln
for ($i=0; $i<count($array[1]); $i++)
$text = preg_replace('#'.preg_quote($array[1][$i].'('.$i.''.'#', '<!-- ANFANG Code '.$array[1][$i].'('.$i.' --><b>'.$array[1][$i].'</b><br>'.highlight_string($array[2][$i], true).'<!-- ENDE Code '.$array[1][$i].'('.$i.' -->', $text);
# Code mit Syntaxfarben wieder einfuegen
return $text;
}
public function htmltotext($text){
preg_match_all('#\<\!-- ANFANG ((?U).*) --\>\s*\<b\>((?U).*)\</b\>\<br\>((?U).*)\s*\<\!-- ENDE (\\1) --\>#s', $text, $array);
for ($i=0; $i<count($array[0]); $i++)
$text = preg_replace('#\<\!-- ANFANG ((?U).*) --\>\s*\<b\>((?U).*)\</b\>\<br\>((?U).*)\s*\<\!-- ENDE (\\1) --\>#s', $array[1][$i], $text);
# Codestellen an Hand von <!-- ANGANG (Bezeichnung) --> (Code) <!-- ENDE (Bezeichnung) --> finden und gegen Bezeichnung ersetzen
$text = html_entity_decode($text);
$text = str_replace('<br>', "\r\n", $text);
# Restliche Textstellen umformen
for ($i=0; $i<count($array[0]); $i++)
$text = preg_replace('#'.preg_quote($array[1][$i]).'#s', '[php '.$array[2][$i].']'.html_entity_decode(strip_tags($array[3][$i])).'[/php.]', $text);
# Code als [php (Bezeichner)] (Code) [/php.] wieder einsetzen
return $text;
}
Das Umwandeln in HTML funktioniert mitlerweile ganz zuverlässig. Aber beim zurückverwandeln schiebt er [/php] wieder eine Spalte weiter runter.
Code im Eingabeformular:
Bla
[php Ein Beispiel:]
<?php
echo "Dies ist ein Beispiel!";
?>
[/php]
Test
Beim editieren (also erst Text zu HTML, dann speichern und wieder HTML zu Text und ausgeben) wird aber schon das draus:
Bla
[php Ein Beispiel:]
<?php
echo "Dies ist ein Beispiel!";
?>
[/php]
Test
Außerdem scheint da neuerdings ein Fehler mit den Syntaxfarben aufzutreten, denn das kommt dabei heraus und sollte jawohl nicht so sein:
Beispiel
Da könnt ihr euch folgenden HTML-Code anschauen:
Bla<br><!-- ANFANG Code Ein Beispiel0) --><b>Ein Beispiel:</b><br><code><span style="color: #000000">
<span style="color: #0000BB"><?php
<br /> </span><span style="color: #007700">echo </span><span style="color: #DD0000">"Dies ist ein Beispiel!";
<br />?></span>
</span>
</code><!-- ENDE Code Ein Beispiel0) --><br>Test
Ich hoffe es kann mir da jemand helfen. Und nein: Das Script verwerfen ist kein guter Ratschlag, denn das hat schon so seinen Sinn.
Danke schonmal für alle helfenden Antworten!
Dustwolf, der verzweifelte...
Nachtrag: Gibt mir Rätsel auf, aber ist so: Er scheint irgendwie das zweite " (nach dem !) mit einem \ escapen zu wollen. Das erste aber nit. Wäre ja schonmal nen Grund, warum das Highlighting nicht funktioniert. Auch wenn ich keinen blassen Schimmer habe, wie das \ da hin kommt und ausgerechnet nur da...