daniel: zu langen String mit "..." abkürzen

Hallo!

eigentlich sollte es ganz einfach sein...

es soll schlicht ein string aus der datenbank, wenn er eine gewisse zeichenanzahl übersteigt, abgebrochen werden und dafür drei punkte "..." angefügt werden.

nach meinem wissen habe ich folgendes in den code geschrieben:

if(strlen($data[title]) > 30) { $data[title] = substr($gesArray[title_ges],0,29)."...";}

trotzdem werden aus $data[title] immernoch zeichenketten ausgegeben, die länger sind. vom anhängen der punkte ganz zu schweigen.
was mache ich falsch?

btw: darf hier als verknüpfungszeichen zwischen dem ausdruck substr($gesArray[title_ges],0,29) und "..."
sowohl der punkt, der beistrich als auch ein plus verwendet werden?

danke,
daniel

  1. if(strlen($data[title]) > 30) { $data[title] = substr($gesArray[title_ges],0,29)."...";}

    der code lautet natürlich:

    if(strlen($data[title]) > 30) { $data[title] = substr($data[title],0,29)."...";}

    daniel

    1. Hallo, Daniel,

      if(strlen($data[title])>30){$data[title]=substr($data[title],0,29)."...";}

      Dein Code sieht eigentlich richtig aus ...

      Auf http://www.php.net/manual/en/function.substr.php habe ich ein Snippet gefunden, das vielleicht noch eleganter ist, weil Worte nicht mittendrin abgeschnitten werden:

      // trim text without break words in the middle
      $maxTextLenght=30;
      $aspace=" ";
      if(strlen($text)>$maxTextLenght)
      {
      $text = substr(trim($text),0,$maxTextLenght);
      $text = substr($text,0,strlen($text)-strpos(strrev($text),$aspace));
      $text = $text.'...';
      }

      Versuch's doch mal damit.

      Grüße,

      Sebastian

  2. Hallo Daniel,

    if(strlen($data[title]) > 30) { $data[title] = substr($data[title],0,29)."...";}

    trotzdem werden aus $data[title] immernoch zeichenketten ausgegeben, die länger sind. vom anhängen der punkte ganz zu schweigen.

    bei mir funktioniert es so wie du es gepostet hast, aber vielleicht machst du um titel besser noch Anführungszeichen drum. btw: da muss 30 stehen und nicht 29 - sonst werden nur 29 Zeichen ausgegeben - oder willst du nur 29 Zeichen ausgeben (die if-Bedingung ist ja nur bis 29 Zeichen definiert) wobei dann auch noch ein '=' fehlen würde?
    Vielleicht liegt es daran, dass an die Funktion substr() gleich die Punkte drangehängt werden versuch doch mal das zu trennen:

    if(strlen($data["title"]) >= 30) {
     $bla = substr($data["title"],0,30);
     $data["title"] = $bla."...";
    }
    wie sehen denn die Zeichenketten aus, die du ausgeben willst?

    btw: darf hier als verknüpfungszeichen zwischen dem ausdruck substr($gesArray[title_ges],0,29) und "..."
    sowohl der punkt, der beistrich als auch ein plus verwendet werden?

    Nein, soweit ich weiß nicht, der Punkt ist das Zeichen zum Verknüpfen von Zeichenketten.

    Grüße aus Nürnberg
    Tobias