Text sinnvoll kürzen

ThiKool

Erfahrenes Mitglied
Hi,

ich möchte einen Text aus der DB kürzen, damit er mir das Layout nicht verzieht.

Das hab ich jetzt so gelöst:

if($message_length > 35)
{
$message = substr($message, 0, 35)."...";
}

Das Problem ist nur, dass es ja verschieden breite Zeichen gibt. 35 Zeichen sind z.B.:

das ist ein ganz langer text, das b...
oder aber acuh
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW...

hier sieht man schon ganz gut was ich meine. Gibt es irgendeine Funktion mit der man das erkennen kann?

Danke euch
 
Nur so am Rande. Es ist unschön einfach nach 35 Zeichen zu schneiden, Also mitten Im Wort.
Darum habe ich vo geraumer Zeit eine Funktione geschrieben: http://wiki.yaslaw.info/dokuwiki/doku.php/php/functions/wordcut
PHP:
    <?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}");
    }
    ?>
 
Auch wenn ich den CSS-Trick cool finde: Man sollte nur übertragen, was auch dargestellt wird. Alles andere ist Verschwendung von Ressourcen. Hier auch mal ein kleines Beispiel:

PHP:
<?php
/**
* Shorten text to a given amount of length after space char or a given tolerance
*
* @param string $text The input text to shorten
* @param number $shortenAfter The minimum (or maximum) amount of character in result
* @param number $tolerance In case of 0 tolerance the text will be shortened to $shortenAfter length
* @param number $appendDots The amount of dots to append to the result text
*
* @return string The shortened text
*/
function smartshort($text, $shortenAfter = 50, $tolerance = 0, $appendDots = 0)
{
   if($shortenAfter < 0 || $shortenAfter >= strlen($text)) return $text;
   if($tolerance < 0 || $tolerance >= $shortenAfter) $tolerance = 0;
   if($appendDots < 0 || $appendDots >= 5) $appendDots = 0;
 
   for($i = $shortenAfter; $i < $shortenAfter + $tolerance; $i++)
   {
     if( ctype_space($text[$i]) )
     {
       break;
     }
   }
   if($i == $shortenAfter + $tolerance && !ctype_space($text[$i]))
     $i = $shortenAfter;
 
   return sprintf("%${i}.${i}s %s", $text, str_repeat('.', $appendDots));
}


$lorem = <<< EOT
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam
et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
sanctus est Lorem ipsum dolor sit amet.
EOT;

$dumbText = "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW";

echo smartshort($lorem, 35, 10, 3) . "\n";

echo smartshort($dumbText, 35, 5, 4) . "\n";

echo smartshort($dumbText, 35, 0, 2) . "\n";
 
Zurück