Diese Funktion schneidet im Gegensatz zu wordwrap() nax X Zeichen ab und versucht dabei die Wörter im Satz nicht zu zerstückeln.
<?php /** * mpl by ERB software * @author stefan.erb(at)erb-software.com */ /** * Schneidet einen Text nach Anzahl Zeichen ab und erweitert mit einem anderen String * @example * $text = "Fischer Fritz fischt frische Fische, frische Fische fischt Fischers Fritz"; * echo wordCut($text, 30, ' ...'); * Ausgabe: Fischer Fritz fischt frische ... * * @param String $text Der zu kürzende Text * @param Number $maxlen Maximale Länge des textes * @param optional String $suffix Text der am Ende angehängt wird * @return String */ function wordCut($text, $maxlen = 30, $suffix = ''){ if(!defined('C_DELIMITER')) DEFINE('C_DELIMITER', '#wordCut#'); // Falls der Text selber schon genug kurz ist, diesen unverändert zurückgeben if(strlen($text)<$maxlen) return $text; // Mittels wordwrap den String unterteilen $trunc = explode(C_DELIMITER, wordwrap($text, $maxlen, C_DELIMITER, true)); //danach den ersten Teil davon extrahieren $trunc = array_shift($trunc); return trim("{$trunc} {$suffix}"); } ?>
Ein typisches Beispiel. Wir haben in der DB mehrere Texte. In einer Übersicht wollen wir nur den Textanfang und ein Weiterführungslink anzeigen.
//Testdaten. Werden normalerweise aus einer DB geladen $id = 15; $text = 'Bei der Explosion einer Bombe in Teheran ist iranischen Medienberichten zufolge Mostafa Ahmadi Roshan ein im Atombereich tätiger Universitätsprofessor getötet worden. Zwei weitere Mitfahrer wurden bei dem Anschlag verletzt. '; //Pattern für den Weiterführenlink define('C_LINK_PATTERN', "<a href='{$_SERVER['SCRIPT_NAME']}?id=%d'><i>[MEHR...]</i></a>"); //Gekürtzten Text mit Weiterführenlink echo wordCut($text, 50, sprintf(C_LINK_PATTERN, $id));