Langen Text gekonnt kürzen
Ich wurde oft gefragt und angeschrieben, ob es eine Möglichkeit gibt einen langen Text zu kürzen ohne ihn mitten im Wort abzuschneiden.
PHP bietet eine Möglichkeit ein text an einer beliebigen Stellen abzuscheiden substr(). Jedoch wird hier gnadenlos mitten im Wort gekürtzt, was nicht immer gewollt ist.
Ich zeige hier eine, auf die schnelle programmierte Möglichkeit. Wobei ich mir sicher bin, dass es noch andere Möglichkeiten gibt.
1. Unser Text (Satz)
Nehmen wir an unser Text (Satz) lautet
“Die singenden Hamster sind der Hit, auch die Katzen sind nicht zu verachten.”
• Dieser Text darf bei der Ausgabe nicht länger als 87 Zeichen sein.
• Als Trennzeichen möchten wir am “[Space]” trennen und nicht mitten im Wort.
• Sollte der Text Uhrsprünglich länger sein soll am Ende ein Link (weiter) stehen.
2. Unser PHP – Code (Klasse)
<?php
class Text {
/**
* @param String $text
* @param Int $laenge
* @param Char $trenner
* @param String $erweiterung
* @return String
*/
function text_kuerzen ( $text , $laenge , $trenner = " " , $erweiterung = " ..." ) {
$array = explode ( $trenner , trim ( $text )); // Der Text wird am Trennzeichen ($trenner) zerlegt
$a = 0 ; // Anzahl der Zeichen startet natürlich bei 0
$y = - 1 ; // Anzahl der Space-Zeichen startet bei -1 (klink komisch ist aber so)
$aus = array(); // neues Array
/**
* Jeder wort im Array wird einzeln analysiert
*/
foreach ( $array AS $textbloock ) {
/**
* Wenn die anzahl der Zeichen($a) in den Wörtern im Array ($aus)
* kleiner sind als das neue Wort + ($a) wird das Wort dem Array ($aus)
* zugefügt und die Anzahl der Zeichen in ($a) wird erhöht.
*/
if(( $a + strlen ( $textbloock ) + $y )< $laenge ) {
$aus [] = $textbloock ;
$a += strlen ( $textbloock );
$y ++;
}
/**
* Sind die bereits vorhandenen Zeichen + das neue Wort größer als
* $laenge wird das neue Wort nicht zugefügt und die Erweiterung ($erweiterung) angehangen.
* Natürlich wird jetzt die Funktion verlassen.
*/
else {
$aus [] = $erweiterung ;
return implode ( " " , $aus );
}
}
/**
* War der Satz oder Text nicht länger als ($laenge) so wird der
* Text einfach OHNE ($erweiterung) ausgegeben.
*/
return implode ( " " , $aus );
}
}
$satz = "Die singenden Hamster sind der Hit, auch die Katzen sind nicht zu verachten." ;
$kurzer_text = new Text ();
$gekuerzt = $kurzer_text -> text_kuerzen ( $satz , 87 , " " , "<a href=\"#\">... weiter lesen >></a>" );
echo $gekuerzt;
?>