Zeilenumbruch in Textarea
fr@gma
- programmiertechnik
Hallo,
ich muss mich leider nochmal melden, ich stehe immer noch auf dem Schlauch!
Ich bekomme einfach keinen Zeilenumbruch hin.
Ich habe mir mal eine kleine Testdatei gebastelt,
überprüft habe ich im InternetExplorer, Opera und Firefox, immer auf Win-Plattform:
Hier mein Quelltext der Testdatei:
<html>
<head>
</head>
<body>
<form name="form1" method="post" action="">
<textarea name="tester" cols="70" rows="5" wrap="PHYSICAL" id="tester"></textarea>
<input type="submit" name="Submit" value="Abschicken">
</form>
<?php
if(isset($tester))
{$array=explode('\r\n',$tester);
echo count($array);
echo nl2br($tester);
}
?>
</body>
</html>
Teststring:
Hier wird momentan etwas getestet und zwar ob endlich mal Umbrüche ausgelesen werden können
Ausgabe
1Hier wird momentan etwas getestet und zwar ob endlich mal Umbrüche ausgelesen werden können
Ich kann mich auf den Kopf stellen, die Maus mit dem Fuß bedienen, beten, betteln - es kommt kein Zeilenumbruch.
Kann mir bitte mal jemand sagen wo mein Fehler liegt?
Bitte, bitte!
Hi,
{$array=explode('\r\n',$tester);
Hm, wenn ich mich richtig erinnere, wird hier wegen der einfachen Anführungszeichen an der Zeichenfolge
Backslash r backslash n
aufgetrennt, nicht an Carriage Return + Line Feed
cu,
Andreas
Hi Andreas,
ich habe mit doppelten Anführungszeichen auch kein anderes Ergebnis erhalten. Was is'n eigentlich >> Carriage Return + Line Feed <<
Was is'n eigentlich >> Carriage Return
Damit wird die ("Cursor-")Position an den Zeilenanfang gesetzt...
»»+ Line Feed <<
...und hiermit in eine neue Zeile. Insgesamt also ein Sprung an die erste Stelle der nächsten Zeile. Das was allgemein als Zeilenumbruch verstanden wird.
rebus
Tag fr@gma.
Ich bekomme einfach keinen Zeilenumbruch hin.
[...]
$array=explode('\r\n',$tester);
Ich bin zwar nicht der PHP-Experte, aber abgesehen von MudGuards Hinweis ist noch zu beachten, dass unter verschiedenen Systemen verschiedene Steuerzeichen für Zeilenumbrüche verwendet werden. Um der Sache Herr zu werden, könnte man die Funktion preg_split verwenden:
$array = preg_split("/(\n|\r|\r\n)/", $tester);
Alternativ könnte auch die Funktion nl2br weiterhelfen.
Siechfred
Tag Siechfred,
ich habe nochmal mit einem manuellen Zeilenumbruch probiert.
Richtig muss es heißen:
$array=explode("\r\n",$tester);
Aber einen automatischen Zeilenumbruch bekomme ich nicht hin, auch nicht mit nl2br.
Das Problem liegt irgendwo anders.
MfG fr@gma
$array=explode("\r\n",$tester);
Aber einen automatischen Zeilenumbruch bekomme ich nicht hin, auch nicht mit nl2br.
Das Problem liegt irgendwo anders.
Dann schau doch mal genau nach, was für Bytes dein Formular liefert
echo chunk_split(bin2hex('test string'), 2, ' ');
und wie dann der Zeilenumbruch kodiert ist.
Diese ASCII-Tabelle kann dir beim Zeichenerkennen behilflich sein.
Hi dedlfix,
der String:
Hier wird momentan etwas getestet und zwar ob endlich mal Umbrüche ausgelesen werden können
sieht so aus:
48 69 65 72 20 77 69 72 64 20 6d 6f 6d 65 6e 74 61 6e 20 65 74 77 61 73 20 67 65 74 65 73 74 65 74 20 75 6e 64 20 7a 77 61 72 20 6f 62 20 65 6e 64 6c 69 63 68 20 6d 61 6c 20 55 6d 62 72 fc 63 68 65 20 61 75 73 67 65 6c 65 73 65 6e 20 77 65 72 64 65 6e 20 6b f6 6e 6e 65 6e
die Zwischenräume sind also immer Leerzeichen "20".
der String:
Hier wird momentan etwas getestet und zwar ob endlich mal Umbrüche ausgelesen werden könnensieht so aus:
48 69 65 72 20 77 69 [...]die Zwischenräume sind also immer Leerzeichen "20".
Dein Test funktionierte also richtig. Nur der Browser spielt hier nicht so wie du es wünschst. Hat er bei mir auch erst als ich wrap="hard" gesetzt habe. Da das Umbruchverhalten aber in keinem Standard definiert ist, und wrap proprietär ist, wärst du vielleicht besser dran, dir jetzt nicht hier die Zähne dran auszubeißen, sondern zu versuchen dein Ziel mit anderen Mitteln zu erreichen.
Ich bin auch aus deinem vorigen Thread nicht schlau geworden. Was genau willst du eigentlich erreichen? Sag jetzt nicht dass du Zeilenumbrüche haben willst, ich will dein Ziel eine Ebene höher wissen. Warum/wofür willst du die haben?
Hi dedlfix;
Du bist ein Engelchen!!!!!!!!!!!!!!!!!!!!!
Mit wrap="hard" funktioniert es. WOW!
Mein Problem ist, aus den Daten des Textfeld wird ein PDF-Dokument erstellt (mit FPDF). Da mehrere Einträge verwendet werden, benötige ich für das PDF-Dokument die genauen Koordinaten.
Ich hoffe es war so einigermaßen verständlich.
Beispiel:
Veranstaltung 1 Datum: 20-01-2005 Beginn: 19 Uhr
Gebäude Testgebäude
Motto "Testveranstaltung 1
Veranstaltung 2 Datum: 20-01-2005 Beginn: 19 Uhr
Gebäude Testgebäude
Motto "Testveranstaltung 2
Damit sich Eintrag 1 und Eintrag 2 nicht überlagern, benötige ich im PDF-Dokument irgendwoher die Koordinaten für den zweiten Textblock.
Deshalb muss ich zuverlässig die verwendeten Zeilen auslesen.
Vielen Dank nochmal!
Beispiel:
Das sieht doch aus wie eine Tabelle, kann man da nicht was tabellarisches machen?
Aber außer dieser Idee kann ich dir nicht viel weiter helfen.
Ich hab nur mal ganz kurz und beispielhaft eine Umsetzung von XML-Daten in tabellarische Form mit XSLT über FOP (erfolgreich) und über LaTeX (weniger erfolgreich, mangels Wissen) in PDF implementiert. Das ist jedoch wegen der mehrfachen Umwandlung etwas aufwändig gewesen, hatte jedoch den Vorteil durch einfaches Austauschen des XSLs flexibel zu sein. Du wirst diesen komplizierten Weg sicher nicht so gebrauchen können...
Hi,
Aber einen automatischen Zeilenumbruch bekomme ich nicht hin, auch nicht mit nl2br.
Was meinst Du mit "automatischen Zeilenumbruch"?
Hat das etwa was mit dem 'wrap="PHYSICAL"' zu tun?
Da dieses Attribut in HTML nicht existiert, kannst Du nicht davon ausgehen, daß es irgendwelche Auswirkungen haben könnte.
cu,
Andreas
Hi Andreas,
Ich bin schon davon ausgegangen, dass man mit 'wrap="PHYSICAL"' einen automatischen Zeilenumbruch hinbekommt, laut HtmL-Erklärung ist das im Internet-Explorer möglich. (ist zwar ohne Gewähr, aber trotzdem muss man doch einen Zeilenumbruch hinbekommen?!).
http://de.selfhtml.org/html/formulare/eingabe.htm#bereiche_umbruch/