Überlange Wörter teilen

  • Themenstarter Themenstarter P_F
  • Beginndatum Beginndatum
P

P_F

Hi, ich habe in einem Kommentarskript das Problem, dass es da User gibt, die sich einen Spaß daraus machen, wörter mit 300 und mehr Zeichen in Ihrem Kommentar zu Posten. Das zerschießt mein Layout. Ich weiß, dass sich das Problem auch mit CSS irgendwie lösen lässt, ich möchte jedoch die sichere PHP-Variante haben.

Ich denke wordwrap() kommt nicht in Frage, da diese Funktion dann auch Andere Wörter abbrechen würde, wenn die Max.-Zeichenanzahl pro Zeile erreicht ist.

Ich habe an RegEx gedacht, kenne mich damit jedoch kein bisschen aus.

Kann mir jemand helfen. Wie wird das in Foren gemacht? Ich möchte übrigens kein JS verwenden.
 
Hi,
verstehe ich das richtig, dass der Text in ein Formular eingegeben wird?
Wenn dies auf Html basiert wäre die einfachste Lösung einfach die Anzahl der Zeichen mit maxlength zu begrenzen.
Ein Beispiel:

<input type="text" name="blabla" maxlength="20">

Das bedeutet ganz einfach das in den Input nur 20 Zeichen eingegeben werden dürften.
Ich hoffe ich habe deine Frage richtig gedeutet und konnte dir helfen.

edit: Diese Möglichkeit ist meiner Meinung nach die einfachste und eine ziemlich sichere.
Gruss
Caramba
 
Die Funktion wordwrap() ist dein Freund :)

PHP:
  $string = "hallo welt";
  
  $string = wordwrap($string , 5 , "\n" , 1);
  echo $string;

Ahso ja zu spät gelesen :( naja unter mir kommt ja ein gutes Beispiel *G*
 
Zuletzt bearbeitet:
Hi,

wie wärs mit sowas, eine Maximallänge für einzelne Wörter festzulegen:
PHP:
function strip_words($str, $maxlen) {
	$arr = split(" ", $str);
	foreach ($arr as $key=>$val) {
		if (strlen($val) > $maxlen) $arr[$key] = substr($val, 0, $maxlen - 3)."...";
	}
	return join(" ", $arr);
}

Gruß
.
 
das ist es, danke :D
langsam kommen meine Nervern zurück *WutAufMeineUser*
@ caramba12321
Das Formular auf eine max-Anzahl zu begrenzen würde gehen, ist aber auch keine gute Lösung, da es nicht hundert-pro sicher ist. Man kann per PHP auch Post-Anfragen manipulieren und es gibt böse User den ich sowas zutrauen würde. Sicher ist sicher!
 
Da klappt noch etwas nicht. Wenn z.B. manche Wörter nicht durch leerzeichen sondern durch umbrüche getrennt sind, wie kann man das erkennen?
 
... Du kannst Umbrüche in das Pattern bei "split" mit aufnehmen.

Allerdings: Ich nehme an, dass Umbrüche auch als solche ausgegeben werden sollen, also sollte es ein simples nl2br() auch schon tun. ;)

Gruß
.
 
Folgende Funktion setzt „ZERO WIDTH SPACE“-Zeichen (U+200B) als Marke für erlaubte Umbrüche in überlange Wörter ein:
PHP:
/**
 * Wraps each word of a string to a given number of characters
 *
 * @param   string   $str      input string
 * @param   int      $maxlen   maximum length of each word chunk
 * @return  string
 */
function realWordWrap($str, $maxlen)
{
	$parts = preg_split('/(?<=\x20|\x2D|\x0A|\x0D\x0A|\x0D|\xA0)/s', $str);
    foreach( $parts as &$value ) {
        if( strlen($value) > $maxlen ) {
            $value = wordwrap($value, $maxlen, '?', true);
		}
	}
	return implode('', $parts);
}
 
Um das Ergebnis auszugeben:

Code:
$meinString = realWordWrap("StringStringString",5);

print_r($meinString);
 
Zuletzt bearbeitet:
Zurück