Wie kürzt man Texte?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
dori

Wie kürzt man Texte?

Beitrag 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!
Antiprofi
Mitglied
Beiträge: 13
Registriert: 06.08.2003 14:19
Wohnort: München ./. Köln

Beitrag 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
Acid
Ehrenadmin
Beiträge: 12195
Registriert: 26.04.2001 02:00
Wohnort: Berlin

Beitrag 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.
Benutzeravatar
QCO
Mitglied
Beiträge: 708
Registriert: 15.03.2003 12:30
Wohnort: Leipzig

Beitrag 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?
Zuletzt geändert von QCO am 08.08.2003 09:49, insgesamt 1-mal geändert.
Schnelle direkte Hilfe? Modeinbau? Umfassender, persönlicher Support? Ein individuelles Design/Template?
Ich bin käuflich und löse zu kleinen Preisen Deine Probleme. Anfragen bitte per PN oder Mail.
dori

Beitrag von dori »

Ahh... Danke an alle! Genau sowas hab ich gesucht! :D
Alexander123
Mitglied
Beiträge: 36
Registriert: 02.02.2003 14:18

Beitrag von Alexander123 »

Kuck dir mal Substr an...
Benutzeravatar
QCO
Mitglied
Beiträge: 708
Registriert: 15.03.2003 12:30
Wohnort: Leipzig

Beitrag von QCO »

mhh, und jetzt?
die preg_*-Funktionen sind da um einiges mächtiger...

*push* :(
Schnelle direkte Hilfe? Modeinbau? Umfassender, persönlicher Support? Ein individuelles Design/Template?
Ich bin käuflich und löse zu kleinen Preisen Deine Probleme. Anfragen bitte per PN oder Mail.
Alexander123
Mitglied
Beiträge: 36
Registriert: 02.02.2003 14:18

Beitrag von Alexander123 »

Sind die schneller oder was?
Denn, wenn nur Texte gekürzt werden sollen, dann reicht es doch aus, substr zu verwenden.-..
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
Antworten

Zurück zu „Coding & Technik“