Webstatt.org - Community seit 2006 - 2012 (2024?)

Neue Absätze vermeiden

Avatar user-168
03.10.2006 16: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.

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.'zwinkern', $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.'zwinkern'zwinkern.'#', '<!-- ANFANG Code '.$array[1][$i].'('.$i.'zwinkern --><b>'.$array[1][$i].'</b><br>'.highlight_string($array[2][$i], true).'<!-- ENDE Code '.$array[1][$i].'('.$i.'zwinkern -->', $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 Beispieltraurig0) --><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 Beispieltraurig0) --><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...

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche
Avatar user-168
04.10.2006 11: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... traurig

Dustwolf ------------------------- Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein. F. Nietzsche