Text sinnvoll trennen

TheGreenDragon

Erfahrenes Mitglied
Hi,

also ich habe einen Text, wenn ich Pech hab sogar einen sehr sehr langen. Den Text muss geteilt werden spätestens nach dem 132ten Zeichen. Mein Problem ist nun wenn ich sowas hab:
PHP:
$text = "Ein sehr seeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeehr langer Text ^^";
und die Funktion str_split() verwende, dann hab ich drei Teile die so aussehen:
PHP:
array(3) { [0]=> string(132) "Ein sehr seeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" [1]=> string(132) "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeh" [2]=> string(16) "r langer Text ^^" }

Die Funktion wordwrap() teilt leider nur die Wörter. Gibt es nicht sowas wie zeilenwrap() ? Oder wie löst man normalerweise so eine Problem?

MFG
Green
 
Was willst du genau erreichen?
Willst du, dass nach dem 132. Zeichen eine neue Zeile beginnt, dan könntest du sowas nehmen:
PHP:
function linewrap($txt)
{
  $arr = str_split($txt, 132);
  return implode("<br>", $arr);
}
 
Hallo,
ich wollte eigentlich folgendes.
Wenn ich einen Text übergebe, der kürzer ist als 132 Zeichen, soll er in ein Array an Position 0.
Wenn ich einen Text übergebe, der länger als 132 Zeichen ist soll dieser Text auf die Arrayposition aufgesplittet werden. Dabei darf er maximal 132 Zeichen pro Postion lang sein.
Jetzt könnte man mit einen einfachen str_split() das genau auf 132 brechen, dann würde aber ein Wort welches von Position 130 bis 140 geht aufgeteilt. Das ist unschön!
Deshalb habe ich mir folgendes gedacht. Wenn ein Wort über 132 Zeichen geht, dann such das erste Leerzeichen von hinten vom ersten der beiden Arraypositionen.
Alles was vor dem ersten Leerzeichen steht kommt an die erste Postion im Array, alles was danach kommt an die zweite. Ich habe dafür eine Funktion geschrieben, leider wohl eine Endlosschleife, aber ich sehe nicht wo der Fehler sein sollte...

PHP:
function splitTextToArray($text, $textArray = false) {
	if($textArray === false) {
		$textArray = array();
	}
	echo $text;
	$textTempArray = str_split($text, 132);
	$countArray = count($textTempArray);
	if($countArray > 1) {
		$subArrayOne = str_split($textTempArray[0]);
		$subArrayTwo = str_split($textTempArray[1]);
		if($subArrayOne[131] !== " " && $subArrayTwo[0] !== " ") {
			$pos = strrpos($textTempArray[0], " ");
			if ($pos !== false) {
				$textArray[] = substr($textTempArray[0], 0, $pos - 1);
				$textTemp = strrchr($textTempArray[0], " ");
				for($i = 1; $i < $countArray; $i++) {
					$textTemp = $textTemp . $textTempArray[$i];
				}
			} else {
				$textArray[] = $textTempArray[0];
				for($i = 1; $i < $countArray; $i++) {
					$textTemp = $textTemp . $textTempArray[$i];
				}
			}
		} else {
			$textArray[] = $textTempArray[0];
			for($i = 1; $i < $countArray; $i++) {
				$textTemp = $textTemp . $textTempArray[$i];
			}
		}
		$returnWert = self::splitTextToArray($textTemp, $textArray);
	} else {
		$textArray[] = $textTempArray[0];
		$returnWert = $textArray;
	}
	return $returnWert;
}
 
Ich glaube der Fehler liegt darin, dass du von den Position 0 und 1 bei SubArrayOne ausgehst.

Ich habe das mal gemacht (ungetestet!!):
PHP:
function SplitLines($Text, $SplitLength, $LineDelimiter="<br>")
{
  $Lines = str_split($Text, $SplitLength);
  $ControlChars = array("\n", "\r", "\t", "\v", "\f", " ");
  
  for ($i=0; $i<count($Lines); $i++)
  {
    $NextLine = $Lines[$i+1];
    
    if (!in_array(substr($NextLine, -1), $ControlChars))
    {
      $Lines[$i] .= substr($NextLine, strpos(  substr($NextLine, 2), " "));
    }
  }
  return implode("<br>", $LineDelimiter);
}
 
Zuletzt bearbeitet:
Hi,

gar nicht mal so schlecht *Thumbs Up*, doch leider sind manche Zeilen immer noch über 132 lang. Besonders mit meinem Beispieltext. Ich grübel mal weiter ...
 
Zurück