textarea auf zeilenumbrüche überprüfen

Hi,

ich bräuchte mal einen Denkanstoß. Ich habe eine Kommentarfunktion und nun will ich überprüfen wie viele Zeilen ein Text hat, da ich vermeiden will das ein Besucher mehrere 100 Zeilenumbrüche macht. Wie würdet ihr das machen?

MfG xXxPeterPanxXx

hmm mit nl2br erst umwandeln dann die anzahl der
´s zählen.
Würde ich sagen, ich könnte jedoch wette es gibt ne bessere Lösung :smiley:

Kennt evtl. jemand bessere Lösung? Sonst mach ich das so wie DD-Stylez es meinte.

Mfg xXxPeterPanxXx

Habe da noch was gefunden, du könnstest alle \r\n und alle \r die im string mit replace in \n umwandeln und anschliessend den String nach \n aufteilen und die länge daraus entsehenden Arrays Zählen.(im grunde dasselbe wie vorhin erwähnte)

oder er soll auch mit preg_match_all(); seht gut funktionieren, als pattern müsstets du dann ‚#\r?\n#‘ nehmen

Grüß und gn8

Dave aka DD-Stylz

[php]<?php

$s = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.

spanning multiple lines
using heredoc syntax.
EOD;

function countChars($haystack, $needle)
{
$cnt = 0;
$pos = 0;

while (($pos = strpos($haystack, $needle, $pos)) !== false) {
    $pos++;
    $cnt++;
}

return $cnt;

}

// Zeilenumbrüche vereinheitlichen
$s = str_replace(‚\r\n‘, ‚\n‘, $s);
$s = str_replace(‚\r‘, ‚\n‘, $s);

// Zählen
echo countChars($s, „\n“);

// Zwei oder mehr Zeilenumbrüche zu zwei zusammenfassen
$s = preg_replace(‚/\n{2,}/‘, „\n\n“, $s);

echo ‚

‘ . $s . ‚
‘;[/php]

Frage bleibt, ob das unbedingt notwendig ist. Dieses Forum scheint es…

…zum Beispiel nicht zu tun.

Danke mermshaus ich werde es nachher ausprobieren.

Ich habe mittlerweile ein weiteres Problem. Ich will mit der Funktion strtok() testen ob ein Wort länger als 40 Zeichen ist.

Dazu benutzte ich eine while Schleife, aber ich muss irgentwo einen Fehler gemacht haben, denn das Skript 30 Sekunden lang bis eine Fehlermeldung kommt.

[php]
$tok = strtok($_POST[‚kommentar‘],’ -\n\t’);
while ($tok !== false) {
if (strlen($tok) >= 40) {
$error = ‚

Sie haben ein Wort oder ein andere Zeichenfolge in ihrem Kommentar das länger als 40 Zeichen ist. Bitte zerlegen Sie das
Wort/Zeichenfolge durch ein Leerzeichen oder einen Bindestrich

‘;
}
}
[/php]

strtok

[PHP]

<?php $string = "Dies ist\tein Beispiel-\nString"; /* Sowohl das Tabulator- als auch das Newline-Zeichen werden zusätzlich zum Leerzeichen als Token zum Zerlegen verwendet */ $tok = strtok($string, " \n\t"); while ($tok !== false) { echo "Wort=$tok
"; $tok = strtok(" \n\t"); } ?>

[/PHP]
das $tok wird bei dir am ende der While garnet erneuert, so ist es eine Endlosschleife.

So geht es aber auch nicht:

[php]
$tok = strtok($_POST[‚kommentar‘],’ -\n\t’);
while ($tok !== false) {
if (strlen($tok) >= 40) {
$error = ‚

Sie haben ein Wort oder ein andere Zeichenfolge in ihrem Kommentar das länger als 40 Zeichen ist. Bitte zerlegen Sie das
Wort/Zeichenfolge durch ein Leerzeichen oder einen Bindestrich

‘;
}
$tok = strtok($_POST[‚kommentar‘],’ -\n\t’);
}
[/php]

MfG xXxPeterPanxXx

Du initialisierst strtok innerhalb deiner Schleife immer wieder neu.

Genau das passiert bei dir. Die Funktion beginnt mit der Prüfung immer wieder von vorne.

Zudem musst du Escape-Sequenzen („\n\t“) in doppelte Anführungszeichen schreiben, sonst werden sie als '' und ‚n‘ interpretiert.

[php]<?php

$_POST[‚kommentar‘] = <<<EOT
Dies ist

ein Test-String\tHallo Welt.

Donaudampfschiffskapitänsmützenbeschriftungsstift

EOT;

function checkWordLengths($s, $maxLength = 40, $delimiters = " -\n\t")
{
$tok = strtok($s, $delimiters);

while ($tok !== false) {
    if (mb_strlen($tok) >= $maxLength) {
        return $tok;
    }
    
    $tok = strtok($delimiters);
}

return '';

}

$error = ‚‘;
$ret = checkWordLengths($_POST[‚kommentar‘], 40);

if ($ret != ‚‘) {
$error = ‚

Sie haben ein Wort oder ein andere
Zeichenfolge in ihrem Kommentar das länger als 40 Zeichen ist.
Bitte zerlegen Sie das Wort/Zeichenfolge durch ein Leerzeichen
oder einen Bindestrich: "‘ . htmlspecialchars($ret) . ‚"

‘;
}

if ($error != ‚‘) {
echo $error;
}[/php]