Steuerzeichen von <table>-Elementen

Igäl

Erfahrenes Mitglied
Liebe Gemeinde

In meinem CMS möchte ich den Usern ermöglichen, ihren Text zu formatieren. Das mache ich in gängiger Manier, indem ich bspw. (b) - mit eckigen Klammern, die ich hier nicht schreiben kann, weil sie als BB-Code interpretiert werden - serverseitig in <b> umwandle.

Unlängst habe ich das auch für eine Tabelle gemacht, damit die User die Möglichkeit haben, den gewünschten Inhalt geordnet darzustellen. Nun funktioniert das auch toll. Aber wie ihr sicherlich schon vermutet habt, bin ich nicht hier, um euch zu erzählen, wie toll alles läuft. Es hat einen dummen Schönheitsfehler:

Für jede Tabellenzeile, die der User erstellt, wird vor der Tabelle eine Leerzeile (<br /> im Quelltext) eingefügt. Meine serverseitige Funktion wandelt "\r\n", "\r" und "\n" jeweils in "&nbsp;<br />" um. Nun vermute ich, dass der <tr>-Tag in irgendeiner Art ein Steuerzeichen angefügt hat, dass dann von meinem Script als "\r\n", "\r" oder "\n" erkannt wird und oberhalb der Tabelle als Zeilenumschlag ausgegeben wird.

Hat jemand von euch Kenntnis, ob das <tr>-Tag solche Fisimatenten macht und falls ja, wie das zu verhindern ist? Die Tabelle als solches wird so dargestellt, wie ich sie haben will und wie ich mir von Tabellen (soweit ich mich erinnern kann, da ich eigentlich schon ewig nicht mehr mit Tabellen arbeite) gewohnt bin.

Für Inputs jeglicher Art verharre ich dankend und wünsche allenthalben ein gelungenes Wochenende.

Greetz, Dä Igäl
 
Lösung
Yaslaw, ich bin ein sehr dummes Kind und deiner Zeit nicht würdig. Der Fehler war, dass ich die Sache zu Testzwecken in Word formatiert habe und zwischen allen [/tr] und [tr] - Tags war ein Zeilenumbruch von Word, der natürlich beim Kopiervorgang miteingefügt wurde. Ich hab das korrigiert und das passt jetzt.

Ich danke dir für deine Zeit und entschuldige mich. Bitte den Post löschen, da er wohl keinen Mehrwert für irgendjemanden hat. Das ärgert mich...
Das mache ich in gängiger Manier, indem ich bspw. (b) - mit eckigen Klammern, die ich hier nicht schreiben kann, weil sie als BB-Code interpretiert werden
Mit plain kannst du das
[plain][code=sql]select ...[/code][/plain]

Die eigentliche Frage kann ich nicht beantworten, da es schwer ist weden das generierte HTMl, noch den Code geschweige eines Userbeispieles zu sehen.
 
Das kann ich natürlich liefern, dachte jedoch, dass es eher eine Frage theoretischer Natur ist (nach unsichtbaren Steuerzeichen von <table> und dessen Child-Elementen). Anbei aber mein Code, der wohl eher dann in den Bereich PHP gehört.

PHP:
public function format_output($text, $html_spec = false, $extended = false)    {
    $original = array("ä", "ö", "ü", "Ä", "Ö", "Ü", "\r\n", "\r", "\n", "[b]", "[/b]",
                      "[i]", "[/i]", "[u]", "[/u]", "[hr]");
    $mutate = array("&auml;", "&ouml;", "&uuml;", "&Auml;", "&Ouml;", "&Uuml;", "&nbsp;<br />",
                    "&nbsp;<br />", "&nbsp;<br />", "<b>", "</b>", "<i>", "</i>", "<u>", "</u>", "<hr />",
                   );

    if($extended)    {
        array_push($original,
                   "[title]", "[/title]", "[bigtitle]", "[/bigtitle]",
                   "[table]", "[/table]", "[tr]", "[/tr]", "[td]", "[/td]",
                   "[ul]", "[/ul]", "[li]", "[/li]"
                  );
        array_push($mutate,
                   "<span style='font-size:110%;text-align:left;'><b>", "</b></span>",
                   "<span style='font-size:130%;text-align:left;'><b><u>",    "</u></b></span>",
                   "<table>", "</table>", "<tr>", "</tr>", "<td style='padding:10px;'>", "</td>",
                   "<ul>", "</ul>", "<li>", "</li>"
                  );
    }


    for($i=0; $i<count($original); $i++)    {
        $text = str_replace($original[$i], $mutate[$i], $text);
    }
    //some more code
}


Ein Beispieltext, wie er vom User eingetragen wird, respektive übersetzt wird:

[table][tr][td][b]Name[/b][/td][td][b]Spielzeug[/b][/td][td][b]Farbe[/b][/td][/tr]
[tr][td]Lotti[/td][td]Ball[/td][td]rot[/td][/tr]
[tr][td]Nostradamus[/td][td]Unheilsbuch[/td][td]schwarz[/td][/tr]
[tr][td]Heidi[/td][td]Ziege[/td][td] braun/weiss [/td][/tr][table]

Das gibt in der Ausgabe eine Tabelle, wie ich sie formatiert haben will, jedoch mit 3 x <br /> unmittelbar oberhalb der angezeigten Tabelle. Es soll da aber keine drei Zeilenumbrüche haben, sondern 0 respektive soviele Leerzeilen wie der User selber einfügt. Darum meine Vermutung, dass tablerows irgendwie ein verstecktes Steuerzeichen haben, die von meiner Funktion übersetzt werden.
 
Yaslaw, ich bin ein sehr dummes Kind und deiner Zeit nicht würdig. Der Fehler war, dass ich die Sache zu Testzwecken in Word formatiert habe und zwischen allen [/tr] und [tr] - Tags war ein Zeilenumbruch von Word, der natürlich beim Kopiervorgang miteingefügt wurde. Ich hab das korrigiert und das passt jetzt.

Ich danke dir für deine Zeit und entschuldige mich. Bitte den Post löschen, da er wohl keinen Mehrwert für irgendjemanden hat. Das ärgert mich...
 
Lösung
Klassiker. Ich habe auch schon Fehler gesucht bis ich merken musste, dass der testfall falsch war :)
 
Normalerweise werfe ich so Zeugs zwischendrin in einen Editor um genau das zu vermeiden :)
 

Neue Beiträge

Zurück