Seite 1 von 1
Wie kürzt man Texte?
Verfasst: 06.08.2003 22:38
von dori
Also, ich habe z.B. der Variable $eintrag einen Text mit über 500 Buchstaben zugewiesen.
Jetzt würde ich gern wissen wie ich den Text auf 250 Buchstaben kürzen kann und der Rest durch ... mehr ersetzt wird!
Hoffentlich kann mir jemand behilflich sein!
Verfasst: 07.08.2003 06:42
von Antiprofi
die genaue php-syntax kann ich dir nicht nennen, da ich reiner java/oracle-entwickler bin.
aber du holst dir mit substring die zeichen 0-254 und hängt dein "mehr..." dran.
in java würd das so aussehen: meinstring = meinstring.substring(0,254) + " mehr...";
greets
Verfasst: 07.08.2003 10:05
von Acid
$eintrag = 'zugewiesener Text';
$eintrag = ( strlen($eintrag) < 250 ) ? $eintrag : substr(stripslashes($eintrag), 0, 250) .'...mehr';
..den blauen Teil bräuchtest du nur, wenn $eintrag auch mal kleiner als 250 sein könnte. Den grünen Teil könntest du nun verlinken, der zum kompletten Text führt.
Verfasst: 07.08.2003 11:44
von QCO
ich häng mich hier mal rein, weil ich auch sowas in der art mache...
bisher hab ich das ganze mit dieser funktion gemacht (die kürzt auf ganze wörter, finde ich irgendwie schöner, als das, was phpbb da macht)
Code: Alles auswählen
function cut_words_string($string, $chars)
{
if(strlen($string) > $chars)
{
$string = substr($string, 0, $chars);
$string2 = implode(' ', array_diff(explode(' ', $string), array(array_pop(explode(' ', $string)))));
if($string != $string2)
{
$string2 .= "...";
}
return $string2;
}
else
{
return $string;
}
}
nur würde ich die funktion aber gern so erweitern, dass ggf. vorhandener bbcode sinnvoll verarbeitet wird. d.h., dass tags, die vor der schnittstelle geöffnet, aber danach geschlossen werden, irgendwie da rangehängt werden müssen.
bis jetzt hab ich folgendes (funktioniert aber hinten und vorn nicht):
Code: Alles auswählen
function cut_words_string2($string, $chars, $bbuid = '')
{
if ( strlen($string) > $chars )
{
$bbcodes = array();
$words = explode(' ', $string);
$i = 0;
$string = '';
while( (strlen($words[$i]) + strlen($string) + 1) <= $chars )
{
$string .= $words[$i] . ' ';
$i++;
}
$scrap = '';
for($i; $i <= count($words); $i++)
{
$scrap .= $words[$i];
}
preg_match_all("/\[\/.+:$bbuid.+\]/", $scrap, $bbcodes);
return $string . implode('', $bbcodes);
}
else
{
return $string;
}
}
Kann mir da jemand helfen?
Verfasst: 07.08.2003 23:43
von dori
Ahh... Danke an alle! Genau sowas hab ich gesucht!

Verfasst: 11.08.2003 11:03
von Alexander123
Kuck dir mal Substr an...
Verfasst: 11.08.2003 12:47
von QCO
mhh, und jetzt?
die preg_*-Funktionen sind da um einiges mächtiger...
*push*

Verfasst: 14.08.2003 17:27
von Alexander123
Sind die schneller oder was?
Denn, wenn nur Texte gekürzt werden sollen, dann reicht es doch aus, substr zu verwenden.-..
Verfasst: 14.08.2003 21:03
von Pyramide
Die regexp Funktionen sind langsamer als einfache Funktionen wie substr. Ob man sie verwenden sollte, hängt immer davon ab, was man machen will. Wenn man z.B. Postleitzahlen validieren will, reicht es aus zu schreiben if(is_int($plz) && strlen($plz)==5). Wenn es allerdings Komplizierter wird (z.B. EMail-Adressen oder BBCode), sind Reguläre Ausdrücke zumindest aufgrund der Lesbarkeit/Code-Menge zu empfehlen.
Aber wer Wert darauf legt, jede Mikrosekunde Rechenzeit zu sparen, sollte auch eine andere Programmiersprache als PHP verwenden.