Zeilenschaltung im Textarea
Andreas Vogt
- php
0 suit0 Vinzenz Mai0 suit0 Andreas Vogt0 Vinzenz Mai0 Tom0 Vinzenz Mai0 Andreas Vogt0 ChrisB0 Andreas Vogt0 ChrisB
0 Vinzenz Mai
Hallo,
habe folgenden Testtext:
<br />Test<br /><br />[img]Bild075.jpg[/img]<br /><br />Test
Jetzt möchte ich die Zeilenumbrüche ersetzen nach \n:
$description = str_replace("<br />", "\n", $description);
Leider wird immer die erste Zeile "verschluckt", was mache ich falsch?
Gruß Andreas
Leider wird immer die erste Zeile "verschluckt", was mache ich falsch?
Du beschreibst die Auswirkung deines Fehlers nicht exakt genug, sodass man dir helfen könnte.
Jedenfalls ist für mich hier kein Fehler erkennbar - außer vielleicht die Auszeichnung des Textes, also dass du anstatt Absätzen lieber <br />-Wüsten verwendest.
Hallo suit,
Jedenfalls ist für mich hier kein Fehler erkennbar - außer vielleicht die Auszeichnung des Textes, also dass du anstatt Absätzen lieber <br />-Wüsten verwendest.
ich vermute folgendes:
Zeilenumbruch in Textarea => nl2br() => <br /> [*]
Bei der Anzeige in der Textarea zum Bearbeiten möchte Andreas nun den umgekehrten Weg gehen.
Freundliche Grüße
Vinzenz
[*] hoffentlich ist's auch XHTML
Zeilenumbruch in Textarea => nl2br() => <br /> [*]
Bei der Anzeige in der Textarea zum Bearbeiten möchte Andreas nun den umgekehrten Weg gehen.
Ja, aber wie bereits erwähnt sehe ich nichts, was an der Zeichenkettenersetzungsfunkion falsch wäre - es ist nicht genau beschrieben, was "nicht funzt" bzw. was "verschlucken" heisst.
Hallo,
also dieses "Phänomen" zeigt sich sogar bei der Forensoftware SMF, wenn ich die erste Zeile frei lasse und speichere, danach wieder bearbeite ist die erste Leerzeile verschwunden.
Ich habe das jetzt ein wenig unkonventionell gelöst indem ich vor dem Anzeigen im Textarea generell ein \n einfüge, und beim Anzeigen im Template wird es wieder entfernt.
Andreas
Hallo Andreas,
also dieses "Phänomen" zeigt sich sogar bei der Forensoftware SMF, wenn ich die erste Zeile frei lasse und speichere, danach wieder bearbeite ist die erste Leerzeile verschwunden.
häufig anzutreffen: Beschnitt solcher Texte mit trim() oder vergleichbaren Funktionen, d.h. das Abschneiden von Whitespace (dazu gehören auch Zeilenumbrüche) am Anfang und Ende einer Zeichenkette.
Freundliche Grüße
Vinzenz
Hello,
also dieses "Phänomen" zeigt sich sogar bei der Forensoftware SMF, wenn ich die erste Zeile frei lasse und speichere, danach wieder bearbeite ist die erste Leerzeile verschwunden.
häufig anzutreffen: Beschnitt solcher Texte mit trim() oder vergleichbaren Funktionen, d.h. das Abschneiden von Whitespace (dazu gehören auch Zeilenumbrüche) am Anfang und Ende einer Zeichenkette.
Wie ist es denn bei MySQL und einem Varchar-Feld mit den führenden und anhängenden Leerzeichen?
Vielleicht sollte ein anderer Spaltentyp gewählt werden?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg

Hallo Tom,
» häufig anzutreffen: Beschnitt solcher Texte mit trim() oder vergleichbaren Funktionen, d.h. das Abschneiden von Whitespace (dazu gehören auch Zeilenumbrüche) am Anfang und Ende einer Zeichenkette.
Wie ist es denn bei MySQL und einem Varchar-Feld mit den führenden und anhängenden Leerzeichen?
führende Leerzeichen werden *nie* abgeschnitten, anhängende Leerzeichen wurden bei Versionen älter als MySQL 5.0.3 abgeschnitten, seither werden anhängende Leerzeichen nur dann abgeschnitten, wenn sie die definierte Feldlänge überschreiten. Dabei wird eine Warnung erzeugt. Steht im Handbuch.
Vielleicht sollte ein anderer Spaltentyp gewählt werden?
Nein. Statt kaputtes Verhalten alter MySQL-Versionen durch Wahl eines falschen Spaltentyps zu "beheben", sollte man eine akzeptable Version von MySQL einsetzen. MySQL 5.0.3 war eine Alpha-Version der 5.0-Serie. Unter einer Produktionsversion der 5.0-Reihe sollte es heute im Realeinsatz nicht sein. MySQL 4.1 ist tot (ältere Versionen sind verwest ...).
Freundliche Grüße
Vinzenz
Hallo,
PHP-Version ist 5.1.2
Gruß Andreas
Hi,
PHP-Version ist 5.1.2
Schön.
Und was ist mit Vinzenz' Hinweis auf trim?
MfG ChrisB
Hallo,
das ist ja das merkwürdige,
in der Tabelle steht es richtig drin, und im Script wird dieser Wert unverfälscht angezeigt. Die Funktion storeCaret() rührt vom BBC Editor her.
$description = $row['body'];
$body = '<textarea style="border: 0px" name="ta" id="ta" rows="12" cols="80" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onchange="storeCaret(this);" tabindex="2">'.$description.'</textarea>';
$mklib->buildpage($body);
Funktion buildpage:
$output .= $Skin->view_body($body);
Template:
function view_body($content) {
return <<<EOF
{$content}<br />
EOF;
}
Hi,
in der Tabelle steht es richtig drin, und im Script wird dieser Wert unverfälscht angezeigt. Die Funktion storeCaret() rührt vom BBC Editor her.
$description = $row['body'];
Kontrollausgaben machen, mittels var_dump bitte, Ergebnis aus der Quelltextanzeige kopieren - vor und nach dem Ersetzen der BR.
MfG ChrisB
Hallo Andreas,
PHP-Version ist 5.1.2
Toms Idee war die, dass Du die Daten in einem MySQL-Datenbank abspeicherst und MySQL diese Daten verfälscht. Dies kann aber ausgeschlossen werden, weil Du Daten am *Anfang* Deiner Zeichenkette verlierst und MySQL den Bereich in Ruhe lässt.
PHP entfernt nicht von selbst Teile einer Zeichenkette, das müsste schon Dein eigener Code sein, der dies vornimmt - beziehungsweise der Code, den Du einsetzt.
Freundliche Grüße
Vinzenz