Willkommen in der Webstatt Zum Webstatt Blog und Stories
Dustwolf Dustwolf am 03.10.06 18:04

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.

[COLOR=green]Achtung:[/COLOR]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);
# Dann 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 wieder eine Spalte weiter runter.

Code im Eingabeformular:
Bla
[php Ein Beispiel:]
<?php
echo "Dies ist ein Beispiel!";
?>

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!";
?>


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 Beispiel:(0) --><b>Ein Beispiel:</b><br><code><span style="color: #000000">

<span style="color: #0000BB">&lt;?php
<br />&nbsp;&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"Dies&nbsp;ist&nbsp;ein&nbsp;Beispiel!";
<br />?&gt;</span>
</span>
</code><!-- ENDE Code Ein Beispiel:(0) --><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...

netcup.de Warum gibt es hier Werbung?
Dustwolf Dustwolf am 04.10.06 13:33

OK, die Zeilenumbrüche hab ich einfach per "\r\n".trim($code)."\r\n" weg bekommen. Bzw. auf einen Zeilenumbruch reduziert.

Aber:
Wieso escaped der bei mir immer alle " und ' bis auf das erste:
Ausgabe nach Umformen in HTML:
<?php

$a = "Dies ist ein erster Test.\";
$b = \"Dies ist ein zweiter Test.\";
$c = \"Dies ist ein dritter Test.\";
$d = \"Dies ist ein vierter Täst.\";

?>

Das macht doch keinen Sinn... :(

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt