einen Text kürzen, ohne mitten im Wort abzubrechen

Wie man eine Zeichenkette kürzt, ist denke ich hinlänglich bekannt. Möchte man aber einen Text kürzen, ohne mitten im Wort abzubrechen, dann hilft substr alleine nicht mehr weiter. Deshalb hab ich mir eine Funktion geschrieben, mit der ich meine Texte bequem kürzen kann:

/**
 * einen Text kürzen
 * @param string $txt der zu kürzende Text
 * @param int $length Anzahl der maximalen Zeichen
 * @param boolean $dots Soll bei Kürzung am Ende ein "..." angehängt werden?
 */
function getShortText($txt,$length, $dots = true){

 //html tags entfernen.
 $txt = preg_replace("/(<\/?)(\w+)([^>]*>)/e","",$txt);  

 //wordwrap.
 $trenner = "~|~";
 $tmp = explode($trenner,wordwrap($txt,$length,$trenner));
 $str = $tmp[0];

 //für den Fall eines komplett geistesgestörten Eintrags ohne Leerzeichen...
 if(strlen($str) > $length)
   $str = substr($txt,0,$length);

 //wurde der Text tatsächlich verkürzt oder nicht?
 if(strlen($str) < strlen($txt)){
   if($dots)
     $str.="...";
 }
 return $str;
}

Das vorherige Entfernen von HTML tags brauchte ich für meine Funktion, da nicht gewährleistet war, dass im Text keine HTML tags vorkommen. Und mitten in einem Tag zu unterbrechen oder Text ohne schließende tags in eine Seite einzufügen war mir definitiv zu unsauber und zu riskant. Deshalb werden zuerst alle tags entfernt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.