Gerade im Webdesign-Bereich kommt es regelmäßig wieder vor, dass man Fließttext auf eine bestimmte Länge kürzen muss um ihn beispielsweise in einem begrenzten darstellen zu können. Allerdings sieht es nicht unbedingt gerade schick aus, wenn man den Text mitten im Wort abschneidet. Nachdem ich das schon mehfach immer spontan hingefrickelt habe, habe ich nun endlich mal eine entsprechende Funktion dafür geschrieben:
Code:
function cut_string($string,$max_length)
//Schneidet einen String nach eine bestimten
//Anzahl an Zeichen ($max_length) so ab, dass
//nur nach vollständigen Wörtern getrennt wird
//
//copyright by www.2webdesign.de
{
$array = explode(" ", $string);
$new_string = "";
if ( $max_length >= strlen($string) )
{
return $string;
}
elseif( count($array) <= 1 )
{
return substr($string, 0, $max_length);
}
else
{
foreach ($array as $word)
{
if ( (strlen($word) + strlen($new_string) ) <= $max_length )
{
$new_string .= $word . " ";
}
else
{
$new_string = rtrim($new_string);
return $new_string;
}
}
}
}
Erläuterung
Der erste Parameter
$string enthält - wer hätte das gedacht - den String mit dem Fließtext während $max_length die Maximale Anzahl an Buchstaben wiedergibt.
Als erstes wird der Text per
explode() an den Leerzeichen zerteilt. Wenn der
$string kürzer ist, als
$max_length wird er direkt und ohne Umschweife wieder zurückgegeben. Enthält er dagegen keine Leerzeichen wird per
substr() einfach abgeschnitten. Hier kann man, je nach Beliebgen alternativ auch
false oder den Ursprungsstring ($string) zurückgeben. Ist das nicht der Fall wird nun in einer Schleife jedes Wort einzeln zu dem neuen String
$newstring hinzugefügt und deren Länge überprüft. Wird
$max_length überschritten, wird
$newstring zur Sicherheit noch mit der Funktion rtrim() umd das Leerzeichen gekürzt und zurückgegeben.