• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Wenn Text zu lang wird durch ... ersetzen?

Lotus

Mitglied
Hallo,

ich würde gerne folgendes Wissen:
Gibt es irgendeine Möglichkeit (egal mit welcher Sprache/Dialekt) ein Container wie z.B. div mit einer festen Größe zu versehen und der restliche Text wird einfach abgeschnitten und durch ... ersetzt?

Ich hab sowas oft in Blogs oder bei Seiten von Joomla gesehen, wo etwas steht wie z.B.
"Dies ist lediglich ein Beispieltext um mein Beispiel besser..."
Und dann kommt so ein Button klicken sie auf weiterlesen oder so..
Wie kann man sowas umsetzen?
 
Du könntest festlegen, dass nur eine bestimmte Anzahl von Zeichen engezigt wird.
z.B.
PHP:
$text = "avhjgdskjvdgb,jsfbfkd fskjhivggd kblgnhrdilhg rdlbnhfdiosbdls lkbdsnio bkdnbouwe klewbouwe bklrehi"; //langer Text
$str = sizeof($text)>30 ? substr($text, 0, 30)."..." : $text; //wenn Text blänger als 30 Zeichen, Zeige nur die ersten 30 Zeichen + ... an, ansonsten den gesamten text
echo $str;
Ist aber nicht abhägig von der breite des divs



edit: hab hier noch was gefunden: PHP: imagettfbbox - Manual
 
hey das ist schon mal keine schlechte lösung.. ist natürlich schwer bei den unterschiedlichen spaces eines jeden buchstabens (abgesehen von monospace schriften) ne optimale länge zu finden.. aber ich denke das ist besser als nichts :)
 
Hab jetzt mal eine Funktion geschrieben, die glaube deine Anforderungen erfüllt:

PHP:
/* 
firstChars()
  kürzt einen String bis auf eine bestimmte Breite
  Parameter:  
      $text:       der zu kürzende String
      $length:     die maximale Breite des Strings in px
      $fontSize:   die Schriftgröße
      $fontFamily: die Schriftart
*/
function firstChars($text, $length, $fontSize, $fontFamily)
{
  $ttfbox = imagettfbbox($fontSize, 0, $fontFamily, $text); //arry mit positionsdaten des strings
  $text_length = $ttfbox[2] - $ttfbox[0]; //breite des Textes
  if($text_length > $length) //Wenn Text breiter als gewünscht, --> kürzen
  {
    for($i=0; $i<strlen($text); $i++) //Breite des Textes nach jedem Zeichen überprüfen
    {
      $substr_ttfbox = imagettfbbox($fontSize, 0, $fontFamily, substr($text,0,$i));
      if($substr_ttfbox[2]-$substr_ttfbox[0] > $length) //Wenn gewünschte Breite erreicht ist String kürzen
      {
        $text = substr($text,0,$i)."...";
        break;
      }
    }
  }
  return $text; //Rückgabe: der gekürtzte String
}
Und ein Beispiel:
PHP:
$asdf = firstChars("ölkkjghfdgjlijhzukztjthdgjvkjhklikzuzjfhtdghcjkghkutztdg", 100, 12, "arial.ttf");
echo $asdf;
 
Zuletzt bearbeitet:
Erstmal vielen vielen Dank, ich kanns gerade nicht ausprobieren, werde ich aber heute abend sicherlich! Zwei fragen hab ich noch, wie siehts hier bei der Performance aus? Und PHP sollte auch in .jsp Dateien funktionieren oder?
 
Jah, habe ich heute auch schmerzlich lesen müssen... Es ist sehr schade das man weder eine php-Datei includen, noch es diesen Befehl für jsp gibt...
 
(Du kannst ja mit .htaccess oder der httpd.conf definieren, welche Dateiformate durch den PHP-Parser gejagt werden.)

Was das Problem (und dessen Lösung) angeht:
Die Beispiele hier trennen auch Wörter mittendrin ab. Man müsste also checken, wo ein Wort oder ein Satz beendet wird.

Außerdem: sizeof sollte man nicht zur Ermittlung einer Zeichenkettenlänge vergewaltigen. strlen() und mb_strlen() sind dafür zuständig.
 
Eigentlich wäre das Wörter mittendrin abtrennen sogar das was ich haben will ;-)
Ich glaube nicht, dass ein gutes Ergebnis dabei rauskommt, wenn ich ne jsp durch nen PHP-Parser jage..
Ich suche schon die ganze Zeit nach einer aehnlichen Funktion für jsp :-/

Ps.:
Ich war mir eigentlich sicher diesen Thread nicht in PHP gepostet zu haben oO?
 
Zurück
Oben