Phil: Text mittels PHP verkürzt anzeigen

Hallo Zusammen,

In meiner MYSQL Datenbank habe ich News gespeichert. Diese sind ziemlich lang und beinhalten auch Zeilenumbrüche. Nun habe ich aber auf der Website zuwenig Platz, um jeweils die ganze News anzuzeigen.

Daher suche ich nach einer PHP-Lösung, die den Text ausgibt, sobald aber eine gewissen Anzahl Zeichen überschritten wurde, den nächsten Punkt (.) oder Zeilenumbruch (<br>) sucht, und dan die Ausgabe mit einem Link auf die komplette News beendet.

Hat jemand eine Idee, wie ich das am eifachsten machen kann?

Danke und Grüsse, Phil

  1. Hat jemand eine Idee, wie ich das am eifachsten machen kann?

    die "harte variante" ist http://at.php.net/substr

    ansonsten, kannst du zb deinen string mit explode an den leerzeichen trennen und dann in einer schleife so lange mit array_pop das letzte element entfernen "ganzes wort", bis die zeichenzahl in summe kleiner als die maximal gewünschte zeichenzahl ist - wenn das erledigt ist mit implode das array wieder zu einem string umformen

    1. Wow, super! Gleich drei tolle Lösungen! Jetzt ist es definitiv nicht mehr eine grosse Sache!

      Vielen Dank, habt mir sehr geholfen!

  2. Hallo Phil,

    angenommen du hast den Text der News in der variablen $n_text dann

    $maxTextLenght=100; // max. Anzahl an Zeichen
    $aspace=" "; //Leerzeichen als Trenner
    if(strlen($n_text)>$maxTextLenght)
    {
    $n_text = substr(trim($n_text),0,$maxTextLenght);
    $n_text = substr($n_text,0,strlen($n_text)-strpos(strrev($n_text),$aspace));
    $n_text = $n_text.'...';
    }

    Gibt dir die News mit ... am Ende aus.
    Solltese du Bilder eingebunden haben, also <img src=......>, dan besser vorher mit strip_tags bereinigen.

    Gruß Rainer

  3. Daher suche ich nach einer PHP-Lösung, die den Text ausgibt, sobald aber eine gewissen Anzahl Zeichen überschritten wurde, den nächsten Punkt (.) oder Zeilenumbruch (<br>) sucht, und dan die Ausgabe mit einem Link auf die komplette News beendet.

    Die Funktion strpos() ist in der Lage, ab einer bestimmten Position zu suchen. Suche vom gewünschten Maximum zuerst den nächsten Punkt, dann den nächsten Umbruch und trenne anschließend den Text mittels substr() bis zum kleineren Wert ab bzw. gar nicht, falls beide Suchen false ergeben (Obacht: strpos() === false benutzen, nicht strpos() == false or gar !strpos()). Geschätzter Aufwand: Fünf Zeilen.

  4. In meiner MYSQL Datenbank habe ich News gespeichert. Diese sind ziemlich lang und beinhalten auch Zeilenumbrüche. Nun habe ich aber auf der Website zuwenig Platz, um jeweils die ganze News anzuzeigen.

    Dann füge der DB ein Feld "Kurzbeschreibung" hinzu, das du auf der Webseite anzeigen läßt zusammen mit einem "mehr lesen"-Link. Dieses ganze strpos/explode-Zeugs ist nur eine Krücke, die dir den Sinn deiner News völlig zerhauen kann, die Performance belastet, und mit der du deshalb auf Dauer nicht glücklich wirst.

    ~JJ

    1. Dann füge der DB ein Feld "Kurzbeschreibung" hinzu, das du auf der Webseite anzeigen läßt zusammen mit einem "mehr lesen"-Link. Dieses ganze strpos/explode-Zeugs ist nur eine Krücke, die dir den Sinn deiner News völlig zerhauen kann, die Performance belastet, und mit der du deshalb auf Dauer nicht glücklich wirst.

      haken: wenn kurztext = abgeschnittener text, dann musst du ggf tippfehler 2x korrigieren ;)

      alternativ: eine markierung einbauen zb ###more### - bis zu dieser ausgabe wird der text auf der "startseite" ausgegeben, im normalen fliesstext wird das ding einfach entfernt

      wordpress macht das so ähnlich

  5. Mahlzeit,

    Daher suche ich nach einer PHP-Lösung, die den Text ausgibt, sobald aber eine gewissen Anzahl Zeichen überschritten wurde, den nächsten Punkt (.) oder Zeilenumbruch (<br>) sucht, und dan die Ausgabe mit einem Link auf die komplette News beendet.

    Warum in PHP? Soll Deine Datenbank wirklich ellenlange Strings, die Du offenbar gar nicht benötigst, an Deinen Webserver übergeben, der dann dort das rausschneidet, was er braucht um anschließend daraus eine HTML-Seite daraus zu machen?

    Auch MySQL kennt Funktionen zur String-Behandlung ...

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Auch MySQL kennt Funktionen zur String-Behandlung ...

      auch eine möglichkeit, aber warum eine extrem kurze php-funktion durch eine ewig-lange mysql-funktionskette ersetzen?

      für viele stringoperationen eignet sich die datenbank ganz gut, aber html-elemente entfernen ist doch etwas aufwändiger

      siehe zb hier
      http://www.artfulsoftware.com/infotree/queries.php#567