• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

textarea auf zeilenumbrüche überprüfen

xXxPeterPanxXx

Neues Mitglied
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
 
Werbung:
hmm mit nl2br erst umwandeln dann die anzahl der <br>´s zählen.
Würde ich sagen, ich könnte jedoch wette es gibt ne bessere Lösung :D
 
Werbung:
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 '<pre>' . $s . '</pre>';

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 = '<p class="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</p>';
}
}
 
Werbung:
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<br />";
    $tok = strtok(" \n\t");
}
?>
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 = '<p class="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</p>';
}
$tok = strtok($_POST['kommentar'],' -\n\t');
}

MfG xXxPeterPanxXx
 
Du initialisierst strtok innerhalb deiner Schleife immer wieder neu.

PHP-Handbuch schrieb:
Beachten Sie, dass nur der erste Aufruf von strtok das String-Argument verwendet. Jeder Folgeaufruf von strtok benötigt nur den zu beachtenden Token, um herauszufinden, wo sich diese im aktuellen String befinden. Um neu zu beginnen oder einen neuen String zu zerlegen, müssen Sie nur erneut strtok mit dem string-Parameter aufrufen, damit die Funktion neu initialisiert wird.

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 = '<p class="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) . '"</p>';
}

if ($error != '') {
    echo $error;
}
 
Werbung:
Zurück
Oben