Hilfe substr()

ThE_eDdA

Grünschnabel
Hio Junx und mädelz,

Ich hab da mal ne Frage. Unzwar kann man ja mit substr() nen Text auf die gewünschte länge kürzen. Also meine Frage ist es möglich zu schaun ob es noch ein ganzes wort ist was man kürz und dementsprechend zu verlängern?

Bsp:

$text = "Dies ist der Tielel einer News abcdefghi hallo";

Der Text soll jetzt nur 35 Zeichen lang sein:

$textkurz = substr($text, 0, 35);
$textrest = substr($text, 35);

Jetzt würde bei $textkurz folgendes raus kommen:

Dies ist der Tielel einer News abcd

Und bei $textrest das:

efghi hallo

ich möchte aber das haben:

Dies ist der Tielel einer News abcdefghi

hallo

Wisst ihr wie ichs meine? z.B. hab ich es hier gesehen http://www.aGu-eSports.de im News Script.

Danke für eure Hilfe

greeze eDdA
 
Hab da was:
PHP:
$length=strlen($text);
if ($length>35)
	{
		$spacepos=strpos($text," ",30);
		$textpart1=substr($text,0,$spacepos);
		$textpart2=substr($text,$spacepos,$length-$spacepos);
	}
Aus Gruenden der Flexibilitaet schau ich ab Stelle 30 nach dem Leerzeichen. Es koennte natuerlich sein, dass an Stelle 29 ein Wort mit 7 oder mehr Buchstaben beginnt, jedoch kann man ja nicht alles beruecksichtigen. :) Ausserdem sind die meisten Worte kuerzer als 7 Buchstaben.
Und jetzt fangt nicht an eine Liste mit Worten ueber 7 Buchstaben aufzustellen. ;)
 
reptiler, um die Wortlänge musst du dir gar keine Sorgen machen, da es ihm so wie ich das verstanden habe egal ist, wenn der Text ein bisschen länger ist, es soll einfach beim ersten Leerzeichen nach Position 35 abgeschnitten werden - musst also erst ab da überhaupt anfangen zu suchen. ;)

(Btw: Diese Funktion wird so oft benötigt, es wundert mich eigentlich, dass es dafür keine eigene gibt.)
 
Wenn ich schon Funktionen fuer PHP geschrieben haette und jetzt wuesste wie ich einen Array entsprechend mit Werten belege und zurueckgebe wuerde ich die mal eben tippern und hier posten. Als Parameter hatte ich mir da gedacht den Text und die die Laenge wo (ungefaehr) gekappt werden soll.
Sodass es dann ungefaehr so aussieht:
PHP:
$result=cutatspace($text,35);
$result ist dann ein Array mit den jeweiligen Stringteilen. Wichtig ist dabei, dass mehr als 2 Teile zurueckgegeben werden koennen. Das Cutting also rekursiv auf den Reststring ausgefuehrt wird bis der Rest kleiner 35 Stellen ist.
 
Zuletzt bearbeitet:
Okay, fertig.
PHP:
function cutatspace($splittext, $splitlength)
{
	if (strlen($splittext)>$splitlength)
		{
			$splitpart=$splittext;
			$counter=0;
			while (strlen($splitpart)>$splitlength)
				{
					$spacepos=strpos($splitpart," ",$splitlength);
					$part1=substr($splitpart,0,$spacepos);
					$splitpart=substr($splitpart,$spacepos+1,strlen($splitpart)-($spacepos+1));
					$parts[$counter]=$part1;
					$counter++;
				}
			$parts[$counter]=$splitpart;
		}
	else
		{
			$parts[0]=$splittext; 
		}
	return $parts;
}
 
Zuletzt bearbeitet:
ICh hab die funktion eingebaut und habe sie versucht zu testen aber ich bekomme
mit dem befehl
Code:
 echo cutatspace('$description', '40')
nur "Array" zurück, wenn ich das echo entferen kommt gar nix.
 
Danke für eure hilfe ich habe es wie folgt gelöst:

PHP:
   $length = 35;
   
   $text = "www.Headnail-Media.com World of Gameserver Warum teuer wenn du's auch günstig kriegst?";
   $laenge = strpos($text," ",$length);
   
   if(!$laenge)
   {
   	$laenge = strlen($text);
   }
   
   $textkurz = substr($text, 0, $laenge);
   $textrest = substr($text, $laenge);
   
   if($textrest)
   {
   	$textkurz.="...";
   	$textrest = "...".$textrest;
   }
   echo $text."<br><br>";
   echo $textkurz."<br><br>";
   echo $textrest."<br><br>";

So funktioniert das alles einwandfrei. Danke nochmal

greeze eDdA
 
bastiang hat gesagt.:
ICh hab die funktion eingebaut und habe sie versucht zu testen aber ich bekomme
mit dem befehl
Code:
 echo cutatspace('$description', '40')
nur "Array" zurück, wenn ich das echo entferen kommt gar nix.

Wie zuvor beschrieben war das meine Absicht. Jeder Teil des gesamten Strings wird in einem Element im Array abgepeichert.
PHP:
$result=cutatspace($text,30);
fuehrt also dazu dass die einzelnen Teile von $text in $result[0], $result[1], usw. zurueckgegeben werden.
 
Zurück