| Lange Texte nach x Zeichen kürzen |
Lange Texte nach x Zeichen kürzenAuf fast jede Webseite auf der News stehen werden sie eingesetzt - Teaser.
Version 1 ist uninteressant für uns, weil der Text schon gekürzt vorliegt. Schauen wir uns also die anderen Varianten an und werfen auch einen Blick auf die Vor- und Nachteile. Lange Texte mit PHP kürzenNachfolgendes Listing liest einen Text ein und kürzt diesen nach 120 Zeichen. Allerdings werden nicht genau 120 Zeichen ausgegeben, sondern es wird ab der 120. Position nach einem Punkt gesucht (der normalerweise das Satzende darstellt) und dann der vollständige Satz ausgegeben. Auf diese Weise kann man verhindern das der Text mitten im Satz abgeschnitten wird. $text = "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."; echo substr( $text, 0, strpos( $text, ".", 120 )+1 ); Diese Methode funktioniert gut, wenn die Texte nicht allzu lang sind. Liest man allerdings komplette News aus einer Datenbank ein, kann der Text schon mal etliche Kilobyte groß sein. Werden viele News von vielen Usern aufgerufen, bzw. ausgelesen, kann das für einen Server schon eine enorme Belastung darstellen. Lange Texte direkt mit MySQL kürzenDer Vorteil beim Kürzen mit MySQL ist, dass tatsächlich nur die benötigte Anzahl an Zeichen ausgelesen werden. Ist eine News z.B. 6000 Zeichen lang, aber wir benötigen nur 200 Zeichen für einen Teaser, lesen wir tatsächlich nur 200 Zeichen aus. Das ist natürlich erheblich resourceschonender und performanter als die Variante mit PHP. Der Nachteil ist, dass wir hier nicht so gut steuern können wo der Text abgeschnitten wird. So kann es passieren das Texte auch mitten in einem Wort aufhören. $sql = "SELECT IF(LENGTH(`nachricht`) > 200, CONCAT(LEFT(`nachricht`, 197), '...'), `nachricht`) AS teaser FROM `tabelle`"; Hier wird geprüft ob der Inhalt im Feld nachricht länger ist als 200 Zeichen. Trifft das zu, werden 197 Zeichen ausgelesen und um ... (typischer Hinweis für einen gekürzten Text) erweitert. Ist der Text kürzer als 200 Zeichen, wird die komplette Zeichenkette ausgelesen. Die Mischung machtsWie wir an diesen beiden Verfahren gesehen haben, hat jede für sich Vor- und Nachteile. Was liegt also näher als beide Vorteile zu nehmen und sie zu einer Dritten Methode zu kombinieren?! <?php $conid = mysql_connect( 'localhost', 'benutzer', 'passwort' ); mysql_select_db( 'datenbank', $conid ); $sql = "SELECT IF(LENGTH(`nachricht`) > 250, LEFT(`nachricht`, 300), `nachricht`) as teaser FROM `tabelle`"; $res = mysql_query( $sql, $conid ); while ($news = mysql_fetch_object( $res )) { echo "<p>" .substr( $news->teaser, 0, strpos( $news->teaser, ".", 180 )+1 ). "</p>"; } ?> Wir stellen also eine DB-Verbindung her und stellen die Anweisung zusammen. Es wird geprüft ob der Inhalt im Feld nachricht länger als 250 Zeichen ist, in dem Fall lesen wir 300 Zeichen aus, ansonsten die komplette Nachricht. Wir lesen also mehr Text aus als benötigt, da wir so sicher stellen wollen, dass wir auch einen kompletten Satz zum abschliessen erwischen. Das Abfrageergebnis wird gefetcht und in der Schleife hübschen wir dann die Ausgabe auf. Es wird also ab der 180. Position nach einem Punkt gesucht, der das Satzende markiert. Der Teaser wird dann bis zu diesem Punkt ausgegeben und auf diese Art haben wir einen performanten, resourceschonenden Weg gefunden unser Ziel zu erreichen. Hinweis: |