Umbruch nach xx Zeichen mit Unterscheidung
Kimo77
- php
0 romy0 seth_not@home
Hi,
ich habe einen String, der nach einer bestimmten Anzahl an Zeichen umgebrochen werden soll. Allerdings kommt die Schwierigkeit hinzu, dass unterschieden werden muss, ob der Umbruch ein Wort trennt oder nicht.
Erfolgt der Umbruch nach einem Wort, so muss der Inhalt in der nächsten Zeile mit zwei Leerzeichen eingerückt werden. Erfolgt der Umbruch innerhalb eines Wortes darf die nächste Zeile nur mit einem Leerzeichen eingerückt sein.
Jemand eine Idee, wie man dies geschickt lösen kann? Mit wordwrap bin ich leider nicht weiter gekommen :/
Danke!!
Hi Kimo77,
ich habe einen String, der nach einer bestimmten Anzahl an Zeichen umgebrochen werden soll. Allerdings kommt die Schwierigkeit hinzu, dass unterschieden werden muss, ob der Umbruch ein Wort trennt oder nicht.
Erfolgt der Umbruch nach einem Wort, so muss der Inhalt in der nächsten Zeile mit zwei Leerzeichen eingerückt werden. Erfolgt der Umbruch innerhalb eines Wortes darf die nächste Zeile nur mit einem Leerzeichen eingerückt sein.
Du durchläufst den String mit der vorgegebenen Anzahl. Wenn du einen Umbruchpunkt hast schaust du dir das Zeichen an, dass danach kommt. Ist es ein Leerzeichen hattest du ein Wort vor dir, kommt ein anderes Zeichen, bist du im Wort. Das ist natürlich etwas grob eingeteilt, da es ja auch Satzzeichen gibt z.B. aber das kannst du ja dann noch einarbeiten, wie du damit umgehen möchtest.
ciao
romy
Danke für die Antwort, aber mir fehlt ein Ansatz wie ich an die Sache genau rangehe.
Vielleicht noch ein paar Tipps oder passende Funktionen? Auf Satzzeichen muss ich nicht achten.
Ahoi Kimo77,
$start=0;
$laenge=xx;
$text="asdfasdf asdfasdf asdfasd fasdf asdfsd f asdfas dfas dfasdf";
while($ausgabe=substr($text, $start,$laenge))
{
echo $ausgabe."<br />";
if($nächstesZeichen=substr($text, $start+$laenge,1))
{
if($nächstesZeichen==" ")
{
//tu was
}
else
{
//tu was anderes
}
}
$start+=$laenge;
}
oder so
MfG
Vielen Dank für die ummfassende Hilfe, damit sollte ich weiterkommen :)
Ahoi Kimo77,
Vielen Dank für die ummfassende Hilfe, damit sollte ich weiterkommen :)
schau dir aber bitte auch im manual die verwendeten funktionen an damit du auch verstehst was da passiert.
http://www.php.net/manual/de/
MfG
hi,
[fertigen Code hingeworfen]
Vielen Dank für die ummfassende Hilfe, damit sollte ich weiterkommen :)schau dir aber bitte auch im manual die verwendeten funktionen an damit du auch verstehst was da passiert.
Klar - die Hoffnung stirbt bekanntlich zuletzt ...
scnr,
wahsaga
Tz, ich bin bei weitem kein PHP Noob. Ich hatte nur ein paar Startschwierigkeiten mit dem Formatierungs-Gefrimel.
Aber totzdem Danke für die Hilfe.
Hi Kimo77,
Danke für die Antwort, aber mir fehlt ein Ansatz wie ich an die Sache genau rangehe.
Was hast du dir denn überhaupt schon überlegt? Wie fit bist du mit PHP? Wie ist dein Umfeld? Was hast du bereits? Wo kommen die Daten her? Wo sollen die Daten hin? Bisher hast nur gefragt, wie man das programmiertechnisch umsetzt, wenn du gar nicht weißt, was du machen sollst, musst du ein bisschen beschreiben, wie dein Arbeitsumfeld aussieht.
Vielleicht noch ein paar Tipps oder passende Funktionen? Auf Satzzeichen muss ich nicht achten.
http://www.php.net ist voll mit Stringfunktionen, genau die brauchst du dazu.
ciao
romy
gudn tach!
Erfolgt der Umbruch nach einem Wort, so muss der Inhalt in der nächsten Zeile mit zwei Leerzeichen eingerückt werden. Erfolgt der Umbruch innerhalb eines Wortes darf die nächste Zeile nur mit einem Leerzeichen eingerückt sein.
beispiel:
umbruch nach n zeichen.
"im wort" sei definiert als zwei aufeinanderfolgende buchstaben.
(ich schreib's in perl-syntax; aber so, dass das uebersetzen nach php leicht sein sollte.)
# $str gegebener string
# $wstr umgebrochener string
# $n vorgegebene anzahl der zeichen pro zeile.
$wstr = '';
$str_cursor = 0; # ein gedachter cursor, der durch den string wandert
$str_len = length($str);
$catch_len = $n; # anz. der zeichen, die fuer die naechste zeile kopiert werden sollen
while($str_cursor<$str_len){
$wstr = $wstr.substr($str, $str_cursor, $catch_len)."\n ";
$str_cursor += $catch_len;
if(substr($str, $str_cursor-1, 2)=~/[a-z]{2}/){
# umbruch im wort
$catch_len = $n-1;
}else{
# wortende
$wstr = $wstr.' ';
$catch_len = $n-2;
}
}
$wstr = substr($wstr, 0, -2); # letzten zeilenumbruch killen
ist ungetestet, aber der gedanke sollte klar sein.
prost
seth
gudn tach!
hmpf, hab's versehentlich abgeschickt, statt erst noch mal die vorschau zu sehen...
in der zeile
if(substr($str, $str_cursor-1, 2)=~/[a-z]{2}/){
muesste es heissen /[a-z]{2}/i
damit auch grossbuchstaben keine probleme machen.
sonderzeichen wie umlaute und das eszett sind bisher noch gar nicht beruecksichtigt.
naja, aber das wirst du ja sicher entsprechend an deiner anforderungen anpassen koennen.
prost
seth