Ich hab mir eine Funktion gebastelt, die einen eingigermaßen gleichmäßigen Umbruch auch über viele Zeilen macht und das Wort zuerst an seinen eigenen Bindestrichen teilt - und das auch möglichst gleichmäßig verteilt.
Ich hab da jetzt einiges rausgelöscht, was Du nicht brauchst (schützen bestimmter Syntaxen vor Umbruch), weiß deshalb nicht genau, ob es die Funktion so jetzt tut:
//$text = zu editirender String
//$untergrenze = mindestwortläng
//$obergrenze = max. Wortlänge
//man stellt also einen unscharfen Bereich ein, in dem Umbrochen wird
//so kann man einen gleichmäßigen Block erreichen
function umbruch($text, $untergrenze, $obergrenze)
{
/*** Nur die einzelnen zu langen Woerter mit Wordwrap behandeln ***/
// 1. Gesamttext in Zeilen aufteilen
$zeilen = preg_split ("|\n|", $text);
foreach($zeilen as $key_z=>$zeile)
{
// 2. Zeilen in woerter aufteilen
$woerter = preg_split ("| |", $zeile);
foreach($woerter as $key_w=>$wort)
{
$laenge = strlen($wort);
//gleichmäßige Teilung errechnen, wenn Obergrenze um 2 Zeichen ueberschritten wird (Trennzeichen: -_)
if($laenge > ($obergrenze + 2))
{
//wieviele Teile ergeben sich bei Teilung?
$oberanzahl = floor($laenge/$obergrenze);
//welcher Relst bleibt?
$oberrest = $laenge%$obergrenze;
if($oberrest)
{
$unterlaenge = floor($laenge/($oberanzahl + 1));
$unterrest = $laenge%$unterlaenge;
$add = ceil($unterrest/($oberanzahl + 1));
$teilung = $unterlaenge + $add;
}
else
$teilung = $obergrenze;
//erst an 'natürlichen' Bindestrichen teilen...
$bindestrichteilung = preg_replace("/(.{".round($teilung * 0.7).",".$teilung."})-/U", "$1- ", $wort);
//dann die sich ergebenden Teile nochmals teilen, falls noetig
if($bindestrichteilung)
{
$teilwoerter = explode(' ', $bindestrichteilung);
#echo join('<br>', $teilwoerter);
$woerter[$key_w] = '';
foreach($teilwoerter as $teilwort)
if( strlen($teilwort) >= ($teilung * (1/0.7)) )
$woerter[$key_w] .= wordwrap($teilwort, $teilung, "- ", 1).' ';
else
$woerter[$key_w] .= $teilwort.' ';
}
else
$woerter[$key_w] = wordwrap($wort, $teilung, "- ", 1);
}
else
$woerter[$key_w] = $wort;
}
$zeile = join(" ", $woerter);
$zeilen[$key_z] = $zeile;
}
//4. Zeilen wieder zu Text zusammenfuegen
$text = join("\n", $zeilen);
return $text;
}
Gruß, Andreas
--
SELFFORUM - hier werden Sie geholfen,
auch in Fragen zu richtiges Deutsch