Zitat von Quetschi
					
						
						
							
							
							
							
								
								
								
								
									Beitrag anzeigen
								
							
						
					
				
				
			
		
 – du willst doch in den Genuss meiner verbesserten Version kommen, hm?Hier noch mal ein Versuch – in linewrap umbenannt, weil die Aufgabe der Funktion wirklich nur noch ist, Text nach x Zeichen umzubrechen, und dabei Original-Zeilenumbrüche beizubehalten. Eventuell vorhandener Whitespace am Ende von Zeilen wird entfernt.
PHP-Code:
	
	
function linewrap($str, $length) {
  $breakchar = "\n";
  $str = preg_replace("/(\r\n|\r)/u", "\n", $str); // Zeilenumbrüche zu \n vereinheitlichen
  $parts = preg_split('/(\s+)/u', $str, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); // split an Whitespace-Zeichen
  $return = array(''); 
  for($i=0, $line=0, $numparts=count($parts); $i<$numparts; $i+=2) {
    $word = $parts[$i];
    $space = isset($parts[$i+1]) ? $parts[$i+1] : '';
    $newline = false;
    if(strpos($space, "\n") !== false) { // wenn der Space nach dem Wort Zeilenumbrüche enthält, sonstigen Whitespace entfernen
      $space = preg_replace("/[^\n]/", '', $space);
      $newline = true;
    }
    if(mb_strlen($return[$line], 'UTF-8') + mb_strlen($word, 'UTF-8') <= $length) { 
      $return[$line] .= $word . $space; 
    } 
    else {
      $return[$line] = rtrim($return[$line]) . $breakchar; // unnötigen Whitespace am Zeilenende entfernen, bevor Umbruch hinzugefügt wird
      $return[++$line] = $word . $space;
    }
    if($newline) { // falls der Space Zeilenumbrüche enthielt, Zeilenzähler weiter setzen
      $return[++$line] = '';
    }
  } 
  return rtrim(join('', $return)); 
} 
          

							
						
Kommentar