mit echo nur die ersten 3 Zeilen anzeigen
Sabine
- php
Ich möchte mit echo nur die ersten drei Textzeilen auf des Datenbankeintrages auf der Hauptseite anzeigen. Wie mache ich das, das es nur die ersten drei Zeilen anzeigt?
Hi,
Ich möchte mit echo nur die ersten drei Textzeilen auf des Datenbankeintrages auf der Hauptseite anzeigen. Wie mache ich das, das es nur die ersten drei Zeilen anzeigt?
wie definierst Du "Zeile"?
Cheatah
Man könnte auch sagen die ersten 300 Zeichen, das kommt auf das gleiche Ergebnis.
Sorry für die ungenaue Formulierung!
hi,
gut, und um welches Datenbanksystem handelt es sich?
Für MySQL:
Man könnte auch sagen die ersten 300 Zeichen, das kommt auf das gleiche Ergebnis.
Da hilft die Stringfunktion LEFT() dir weiter.
Allerdings natürlich auf eine recht primitive Weise, weil die ohne Rücksicht auch mitten in Wörtern abbricht - und wenn BBCode o.ä. verwendet würde, könnte daraus sogar ein echtes Problem werden, weil es ggf. auch Tags mittendrin kaputtmachen könnte.
gruß,
wahsaga
Dann wäre es besser wenn man ganze Wörter ausliest. Oder wie siehst Du das?
mit der Funktion str_word_count() kann ich zwar die Wörter in der mysql-Datenbank lesen, aber wie zeige ich dann nur die ersten 30 an?
mit der Funktion str_word_count() kann ich zwar die Wörter in der mysql-Datenbank lesen, aber wie zeige ich dann nur die ersten 30 an?
solltest du den text aus der datenbank in einem array wie z.b. $array haben, dann teile ihn mit explode(" ", $array) und gib die ersten 30 wörter mit einer for-Schleife aus, die das array 30-mal durchläuft.
lg thomas
hab ich das jetzt verlesen,
wenn es ein "normaler" string ist dann kannst folgendes tun
substr(html_entity_decode($abfrage),0,300);
wobei das schon geschachtelt ist und eventuelle html tags rausnimmt ...
angezeigt wird aber Zeichen 0 bis 300
j.
ist aber für mich von Nachteil, das substr(html_entity_decode($abfrage),0,300); nur Zeichen ausliest und keine kompletten Wörter.
Hat da noch einer eine bessere Idee?
ja, natürlich hab ich dann einen Vorschlag
nehme erst einen substr von etwa 305 Wörtern und dann mach das ganze über explode und gib alles bis auf das letzte array aus ... (oder implode alles ausser letzte.
das letzte deswegen weil das "potientiell" abgeschnitten ist.
also erster Teil
$gekuerzt = substr(html_entity_decode($abfrage),0,305);
explode (" ",$gekürzt);
und dann 2.Teil Array ausgeben ohne den letzten Teil oder
array ohne letzten Teil imploden und als string ausgeben ...
Hallo Sabine,
Ich möchte mit echo nur die ersten drei Textzeilen auf des Datenbankeintrages auf der Hauptseite anzeigen. Wie mache ich das, das es nur die ersten drei Zeilen anzeigt?
Du holst den gesamten Eintrag aus der Datenbank in eine String-Variable. Aus dieser Variablen ziehst du dir dann die ersten drei Zeilen heraus:
$alles = '...'; // deine Zeichenkette aus der Datenbank
$line_count = 3;
$suchmuster = '/\A(.+?[\r\n]){'.intval($line_count).'}/';
if( !preg_match($suchmuster, $alles, $gefunden) ) exit('Fehler: Nichts passendes gefunden!');
$drei_zeilen = $gefunden[0];
// Ausgabe zur Kontrolle:
printf('<pre>%s</pre>', $drei_zeilen);
Hierbei hab ich das Kriterium "Zeile" so definiert, dass eine Zeile aus einem Haufen "Nicht-Zeilenumbruch-Zeichen" (mindestens eines) mit einem "Zeilenumbruch-Zeichen" am Ende besteht. Wobei es sich beim Zeilenumbruch-Zeichen wahlweise um ein "\n" oder ein "\r" handelt.
Mit den 300 Zeichen geht das ähnlich, du musst halt nur einen Weg finden, die "Wörter" zu zählen. Das könnte über den Umweg der Wörter-Zwischenräume ganz gut funktionieren. Du zählst also die Leerzeichen und Zeilenumbrüche zwischen den Wörtern ("white spaces"):
$alles = '...';
$word_count = 300;
$suchmuster = '/\A(.+?\s+){'.intval($word_count).'}/';
if( !preg_match($suchmuster, $alles, $gefunden) ) exit('Fehler: Nichts passendes gefunden!');
$anfang = $gefunden[0];
// Ausgabe zur Kontrolle:
printf('<pre>%s</pre>', $anfang);
Was die Zeichen im $suchmuster bedeuten, erfährst du woanders:
http://www.php-resource.de/tutorials/read/10/1/
http://pcre.nophia.de/explain/index.php
Wikibook:Websiteentwicklung:PHP:Reguläre_Ausdrücke
MffG
EisFuX
Nachtrag:
Es soll ja vorkommen, dass ein Eintrag in der Datenbank kürzer als die gewünschte Zahl von 3 Zeilen oder Zeichen sein soll. Dann wäre es natürlich blöd, wenn nur eine Fehlermeldung angezeigt würde. Daher ist es ratsam, die PCRE-Suchmuster zu ändern:
Für die Zeilen:
$suchmuster = '/\A(.+?[\r\n]){1,'.intval($line_count).'}/';
Für die Zeichen:
$suchmuster = '/\A(.+?\s+){1,'.intval($word_count).'}/';
MffG
EisFuX
$maxTextLenght=300;
$aspace=" ";
if(strlen($DEINTEXT)>$maxTextLenght)
{
$n_text = substr(trim($DEINTEXT),0,$maxTextLenght);
$n_text = substr($DEINTEXT,0,strlen($DEINTEXT)-strpos(strrev($DEINTEXT),$aspace));
}
echo"$DEINTEXT";
nimmt die 300 Zeichen und zerhackt dir auch nichts mitten im Wort.
Gruß Rainer
Sorry, so ist es richtig
$maxTextLenght=300;
$aspace=" ";
if(strlen($DEINTEXT)>$maxTextLenght)
{
$DEINTEXT = substr(trim($DEINTEXT),0,$maxTextLenght);
$DEINTEXT = substr($DEINTEXT,0,strlen($DEINTEXT)-strpos(strrev($DEINTEXT),$aspace));
}
echo"$DEINTEXT";nimmt die 300 Zeichen und zerhackt dir auch nichts mitten im Wort.
Gruß Rainer
yo,
du hast uns immer noch nicht mitgeteilt, welches dbms und welche version du verwendest. ich gehe mal von mysql und mindestes version 4.1 aus.
erst einmal wendest du die funktion substr auf die ersten 300 zeichen bei der datenbankabfrage. es macht keinen sinn, mehr als die zeichen über das netz an den client zu schicken, weil sonst unnötig traffic ensteht, also substr(spaltenname, 0, 300).
leider kennt meiner meunung nach mysql keine funktion, die das erste leerzeichen von rechts findet. also machst du den rest in php. dort suchst du nach der position des ersten leerzeichens von rechts und schneidest den string entsprechend der position ab. das sollte dir eine ausgabe liefern, die nicht länger als 300 zeichen ist und unvollständige wörter abschneidet.
Ilja
Hi,
erst einmal wendest du die funktion substr auf die ersten 300 zeichen bei der datenbankabfrage. es macht keinen sinn, mehr als die zeichen über das netz an den client zu schicken, weil sonst unnötig traffic ensteht, also substr(spaltenname, 0, 300).
leider kennt meiner meunung nach mysql keine funktion, die das erste leerzeichen von rechts findet.
Man könnte mit reverse() was tricksen.
also machst du den rest in php.
Halte ich aber für sinnvoller.
cu,
Andreas