PHP: Übermäßig lange Wörter im Text-String trennen

Sicherlich kennt ihr die Probleme die sich ergeben wenn man dem Benutzer erlaubt Text auf der Webseite zu hinterlassen. Sei es ein Kommentar, ein Beitrag im Forum oder ... was auch immer! Solche Texte können - auch wenn sie kein Spam sind - unerwünschte Ergebnisse liefern. Beispielsweise gibt es Benutzer, die zum Spaß alle Worte eines Satzes zusammen schreiben und so das komplette Layout zerstören.

Eine kleine PHP-Funktion bietet hier Abhilfe. Wörter ab einer bestimmten Länge werden einfach durch ein Leerzeichen getrennt und somit zu zwei "Wörtern".

Der Code

<?php
function shortenWords($text, $laenge) {
	$woerter = explode(" ", $text);
	// alle Wörter prüfen
	for($i = 0; $i <= count($woerter); $i++)
	{
		// Wort zu lang?
		if(strlen($woerter[$i]) >= $laenge)
		{
			// Wort teilen
			$woerter[$i] = chunk_split($woerter[$i], $laenge, " ");
		}
	$text = implode(" ", $woerter);
	}
return $text;
}
shortenWords($nachricht, 255);
?>
Als Textdatei öffnen | since1985de_f092de43.txt | 423 Byte

6. Dezember 2009

  • Eingeordnet unter: PHP
  • eine Antwort

PHP: Einfacher Weg um Text-Strings zu kürzen ohne Wörter zu beschneiden

Natürlich gibt es viele Wege um an ein bestimmtest Ziel zu kommen. So auch, wenn man einen Text-String in PHP ab einer bestimmten Anzahl von Zeichen kürzen will ohne dabei die Wörter abzuschneiden. Ich habe einige schreckliche Beispiele gesehen – lange Funktionen die es unnötig kompliziert machen. Dabei kann es doch so einfach sein!

Wenn es mal etwas kürzer sein soll

Ich habe vor einiger Zeit ein Snippet entdeckt, dass quasi mit einer Zeile Code auskommt. Der Text $text wird nach $laenge abgeschnitten, ohne dabei die Wörter zu beschneiden. Außerdem kann eine Startposition $start festgelegt werden.

Zu beachten sei hierbei jedoch, dass die Verwendung dieses Codes nur bei reinem Text – ohne HTML-Tags oder ähnlichem – Sinn macht, da Tags nicht geschlossen werden und somit fehlerhafter HTML-Code produziert werden könnte.

Der Code

<?php
	$start = 0;
	$laenge = 120;
	$text =  preg_replace("/[^ ]*$/", '', substr($text, $start, $laenge));
?>
Als Textdatei öffnen | since1985de_6f55dd49.txt | 155 Byte

6. Dezember 2009

  • Eingeordnet unter: PHP
  • keine Antworten