Hilfe! Ich brauche mal den geschulten Blick eines "Experten"!!
Hein
- perl
Könnte mal bitte jemand kurz diesen Teil meines Skripts durchschauen? Mein Problem ist unter http://www.realschule-roxel.de/gaestebuch.html zu sehen. Tragt einfach mal ein richtig langes Wort ein, dann stretched sich die ganze Tabelle in alle Richtungen! Ich glaube das folgender Part des Skripts dies eigendlich verhindern sollte, tuts aber leider nicht! #####
sub trim {
my $string = shift;
my @sentence = split(/\s+/,$string);
my $j = 0;
my $word_length_max = 40;
foreach $word (@sentence) {
my $s_length = length($word);
if ($s_length > $word_length_max) {
my $num = int($s_length / $word_length_max);
for ($i=0;$i<$num;$i++) {
$sentence[$j] = substr($word,0,$word_length_max-1) . '-';
$j++;
}
$char_index += $word_length_max;
$sentence[$j] = substr($word,0,-1);
$j++;
}
else {
$sentence[$j] = $word;
$j++;
}
}
$string = join(" ",@sentence);
return $string;
}
Weiss jemand warum nicht? Ich wäre für einen Tip sehr dankbar!!
HEnning
Hi,
wäre es nicht am einfachsten das <input> auf eine zeichenlänge zu limitieren mit "maxlength=40" im html-code??
dann kann man nur 40 zeichen eingeben.
oder ist das zu simple?
DerPilz
Hi,
wäre es nicht am einfachsten das <input> auf eine zeichenlänge zu limitieren mit "maxlength=40" im html-code??
dann kann man nur 40 zeichen eingeben.
oder ist das zu simple?
DerPilz
Das würde zwar was bringen, allerdings die Nutzungsmöglichkeitne dieses ansonsten echt guten Guestbooks unzumutbar einschränken, oder?!
Trotzdem Danke!
Henning
Hallo
Könnte mal bitte jemand kurz diesen Teil meines Skripts durchschauen? Mein Problem ist unter http://www.realschule-roxel.de/gaestebuch.html zu sehen. Tragt einfach mal ein richtig langes Wort ein, dann stretched sich die ganze Tabelle in alle Richtungen! Ich glaube das folgender Part des Skripts dies eigendlich verhindern sollte, tuts aber leider nicht! #####
Was tut die Funktion denn? Was kommt hinten raus? Was steht im error_log?
function trim
trim words that are certain size in length
Woher hast Du die Funktion, bzw. wer hat sie geschrieben?
sub trim {
my $string = shift;
my @sentence = split(/\s+/,$string);
my $j = 0;
my $word_length_max = 40;
foreach $word (@sentence) {
my $s_length = length($word);
if ($s_length > $word_length_max) {
my $num = int($s_length / $word_length_max);
for ($i=0;$i<$num;$i++) {
$sentence[$j] = substr($word,0,$word_length_max-1) . '-';
^.... hier wird in die auf den Index $j folgenden Elemente
von @sentence incl. $j der erste Teil des gekürzten
Wortes geschrieben. Der OFFSET für substr() wird nicht
erhöht!?
$j++;
}
$char_index += $word_length_max;
$sentence[$j] = substr($word,0,-1);
^..... nun wird an die Stelle des Index $j nochmal das bis auf ein
Zeichen gekürzte Wort in @sentence geschrieben.
$j++;
}
else {
$sentence[$j] = $word;
$j++;
}
^...... das soll wohl das nach dem zu langen Wort folgende Wort
"dahinter" wieder einfügen. Hierbei werden aber imho
nachfolgende Worte überschrieben.
}
$string = join(" ",@sentence);
return $string;
}
Dieses Stück Code erzeugt - zumindest bei mir und wenn ein zu langes Wort vorkommt - eine Endlosschleife.
Du erhöhst $j im Falle eines zu langen Wortes gleich x-mal. Dabei werden imho nachfolgende Worte durch den ersten Teil des langen Wortes überschrieben. Durch die Inkrementierung von $j wird im else-Zweig das gekürzte Wort immer noch mal "hinten" an @sentence drangehängt, nachdem es - wenn ich es richtig verstanden habe - vorher sämtliche anderen Elemente in @sentence überschrieben hat.
Besser wäre imho, den neuen Text auch in ein neues Array zu schreiben, statt @sentence zu verlängern. Dadurch vermeidet man zumindest schon mal die Endlosschleife und einige andere Problem des obigen Codes. Wenn man kein neues Array verwenden will, sollte man wenigstens das gesplittete Wort mit splice() in @sentence einfügen.
Imho zeugt dieser Code nicht davon, daß der Autor Perl verstanden, geschweige denn seinen eigenen Code gestestet hat. :-(
Weitere Analysen wirst Du oder der Autor selbst durchführen müssen. Aber vielleicht stimmt ja jetzt die Richtung. :)
Gruß Alex
--
http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart
Hallo
[...]
$j++;
}
$char_index += $word_length_max;
$sentence[$j] = substr($word,0,-1);
^..... nun wird an die Stelle des Index $j nochmal das bis auf ein
Zeichen gekürzte Wort in @sentence geschrieben.
Es muss natürlich "... nochmal das _um_ ein Zeichen gekürzte ..." lauten.
Neusprech: <ins>um</ins><del>bis</del> ;-)
[...]
Gruß Alex
--
http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart