Umbrüche in Formular umsetzen
Oliver Antosch
- html
0 Jörk Behrends0 Rolf
Hallo,
auf meiner Website kann man in einem Formular Daten eingeben,
die dann per Email (Perl Skript) verschickt werden. Ich will das
nach so-und-so-vielen Zeichen Umbrüche eingebaut werden.
Mit wrap="physical" bin ich leider nicht fündig geworden.
Hallo,
auf meiner Website kann man in einem Formular Daten eingeben,
die dann per Email (Perl Skript) verschickt werden. Ich will das
nach so-und-so-vielen Zeichen Umbrüche eingebaut werden.
Mit wrap="physical" bin ich leider nicht fündig geworden.
Hi Oliver!
Probier's doch mal mit
$text =~ s/(.{0,10}\w)\s/$1\n/g;
Die 10 steht hier für so-und-so-viele Zeichen minus 1. Der Text würde also umgewandelt
werden, in einen Text mit höchstens 11 Zeichen pro Zeile. Es sein denn es gibt dort ein
Wort, welches länger ist als 11 Zeichen:
123 123456789012345 123 12345 1234
wird zu
123
123456789012345
123 12345
1234
Möchtest Du, daß mehrere Leerzeichen durch einen Zeilenumbruch ersetzt werden, so ersetzte
\s durch \s+
123 12345 1234
wird dann zu
123 12345
1234
anstelle von
123 12345
1234
Viel Spaß damit,
Jörk
$text =~ s/(.{0,10}\w)\s/$1\n/g;
Die 10 steht hier für so-und-so-viele Zeichen minus 1. Der Text würde also umgewandelt
werden, in einen Text mit höchstens 11 Zeichen pro Zeile. Es sein denn es gibt dort ein
Wort, welches länger ist als 11 Zeichen:123 123456789012345 123 12345 1234
wird zu
123
123456789012345
123 12345
1234
der Ansatz war schon ganz gut, allerdings musste ich es etwas abändern:
$in{text} =~ s/(.{1,80}[a-zA-Z:,0-9öüä\s])\s/$1\n/g;
$in{text} =~ s/\n\n/\n/g;
die erste Zeile berücksichtigt, das z.B. auch ein Doppelpunkt vorkommen könnte.
Außerdem das eine Zeile nicht bis zum Ende ausgeschrieben sein kann. Der Text
wär somit ok, wenn man das Skript lokal ausführt, schickt man das ganz jedoch
mit sendmail, dann wird aus einer Leerzeile eine doppelte Leerzeile (weiss jemand warum?)
Daher noch $in{text} =~ s/\n\n/\n/g; um die Doppelleerzeile in eine Einfachleerzeile zu konvertieren.
$text =~ s/(.{0,10}\w)\s/$1\n/g;
der Ansatz war schon ganz gut, allerdings musste ich es etwas abändern:
$in{text} =~ s/(.{1,80}[a-zA-Z:,0-9öüä\s])\s/$1\n/g;
$in{text} =~ s/\n\n/\n/g;die erste Zeile berücksichtigt, das z.B. auch ein Doppelpunkt vorkommen könnte.
Ich hatte das \w eingesetzt, damit der Text, der zu einer Zeile wird, nicht mit einem Space endet. Besser wäre da vielleicht ein \S gewesen ...
Ansonsten bezog sich \w nur auf das letzte Zeichen in der Zeile. Wenn Du das letzte Zeichen beliebig gestalten möchtest, so kannst Du auch /(.{1,81})\s/ benutzen.
Außerdem das eine Zeile nicht bis zum Ende ausgeschrieben sein kann. Der Text
wär somit ok, wenn man das Skript lokal ausführt, schickt man das ganz jedoch
mit sendmail, dann wird aus einer Leerzeile eine doppelte Leerzeile (weiss jemand warum?)
Das sollte wohl an Deiner Variation liegen. Insbesondere das \s in der eckigen Klammer bringt
hier die Verwirrung. Im Gegensatz zum '.' kann \s auch ein Return matchen ...
Bsp:
$text = "12 3 4 5\n 6 7 8";
$text =~ s/(.{1,4}[a-zA-Z:,0-9öüä\s])\s/$1\n/g;
dann wird $text zu
"12 3\n4 5\n\n6 7 8"
mit
$text =~ s/(.{1,4}\S)\s/$1\n/g;
erhält man
"12 3\n4 5\n 6 7\n8"
Daher noch $in{text} =~ s/\n\n/\n/g; um die Doppelleerzeile in eine Einfachleerzeile zu konvertieren.
Wird dann hoffentlich hinfällig.
Jörk
Hallo,
auf meiner Website kann man in einem Formular Daten eingeben,
die dann per Email (Perl Skript) verschickt werden. Ich will das
nach so-und-so-vielen Zeichen Umbrüche eingebaut werden.
Mit wrap="physical" bin ich leider nicht fündig geworden.
Hallo,
machs doch einfach mit der CGI-LIB.PL, geht so:
require "cgi-lib.pl";
ReadParse();
$in{'Textarea'} =~ s/\n/<br>/g;
Sommerliche Grüße aus EF, Rolf