gezieltes ersetzen von zeichen , ausgabe mit zeilenumbruch erreichen

Renault2000

Grünschnabel
Hallo

hab mich hier schon totgesucht und auch sonst schon den kopp zermartert, aber ICH kömm nit drauf.
hab ZWEI probleme,wobei das zweite zweitrangig ist ;)
leider greifen die auch bissi ineinander ein.

zum einen will ich aus einem formular den übergebenen text formatiert ausgeben. sollte er zu lang sein so soll er umgebrochen werden und in der zweiten zeile dann nach dem doppelpunkt anfangen!
Bsp:

Datum : 10.10.06
Datei. : Unser Urlaub am See am 23.09.04
und die große Schaukel davor.jpg​

Nun hab ich das Problem wenn überall Punkte zwischen den Leerzeichen sind (Unser.Urlaub.am.See.am.23.09.04.und.die.große.Schaukel.davor.jpg), funktioniert das wordwrap nicht mehr, denn er sieht es dann als einen langen String an. Dann wirft er den ganzen text in die zweite zeile und läßt ihn "am stück, so das die formatieren flöten geht, da viel zu lang!

Ausgabe is dann:
Datum : 10.10.06
Datei. :
Unser.Urlaub.am.See.am.23.09.04.und.die.große.Schaukel.davor.jpg​

breche ich mit Chunk_Split um, dann trennt er u.U. wörter mittendrin, was auch nit toll ist.
daher hatte ich die idee ich checks mit wordcount und wenn kleiner zwei wörter dann error.
Nur laut wordcount hat z.B. der satz trotzdem 14 Wörter, aber umbrechen tut er den nit. Lasse ich nicht aber mit
str_replace("."," ")
den text umwandeln, gehen auch das datum und die dateiendung (in dem fall unwichtig, aber anderswo noch benötigt) flöten!

Da einer ne Idee zu?


DAS ZWEITE PROB HAB ICH INZWISCHEN SELBST GELÖST
nu bräucht ich nur noch hilfe beim ersten, dem ersetzen von "." bzw nit ersetzen von "." ;)

thx

Das zweite Problem ist die Länge des Textes. Falls einer mehr schreibt als eine zeile bzw mehr als 40 Zeichen, so soll der text umgebrochen werden.
bisher hab ichs halt auf 80 zeichen, sprich zwei zeilen beschränkt und verarbeite das array von "hand". $avar[0] + $avar[1]

PHP:
	$avar = wordwrap($text, 62, "\n", 1);
  	$avar = explode("\n", $avar);
	  $line =substr_replace($blankline,$avar[0],10,strlen($avar[0]))."\n";
	  $line.=substr_replace($blankline,$avar[1],32,strlen($avar[1]));
wenns aber mehr wären, dann würde ich das gern per schleife machen.
Ab der zweiten zeile soll er ab dem 32. zeichen einsetzen und in der letzten keine Zeilenvorschub mehr hinzfügen, zwecks der formatierung

PHP:
$avar = wordwrap($text, 62, "\n", 1);
$avar = explode("\n", $avar);
$len  = count($avar);
		for ($i=0 ; $i<$len ; $i++){
			if ($i=0)    $line =substr_replace($blankline,$avar[$i],10,strlen($avar[$i]))."\n";
			if ($i<$len) $line.=substr_replace($blankline,$avar[$i],32,strlen($avar[$i]))."\n";
			if ($i=$len) $line.=substr_replace($blankline,$avar[$i],32,strlen($avar[$i]));  
			}

genau das tuts aber nit

Daher , wo hab ich hier nen denkfehler?

hier mal die ganze function die ich bisher habe und auch bis zu zwei zeilen funktioniert, außer der wordcountzeile, die sieht ja das es mehrere wörter sind auch wenn punkte zwischen den wörtern sind, das wordwrap aber nicht!

PHP:
function writeline($text)
  {
    GLOBAL $blankline;
    	if (strlen($text) >102 ){
		die ("Der Text ::: $text ::: ist nun wirklich zu lange, bitte weniger als 80 Zeichen verwenden");
					}
	if (strlen($text) <62 ){
		$line=substr_replace($blankline,$text,10,strlen($text));
     		return($line);
				}
	if (str_word_count($text) <1 ){
		die ("Bitte trenne den Text durch Leerzeichen, \n FALSCH: Unser.Urlaub.am.See.am.23.09.04.und.die.große.Schaukel.davor.jpg \n RICHTIG:Unser Urlaub am See am 23.09.04.und die große Schaukel davor.jpg   ");
				}
	$avar = wordwrap($text, 62, "\n", 1);
  	$avar = explode("\n", $avar);
	  $line= substr_replace($blankline,$avar[0],10,strlen($avar[0]))."\n";
	  $line.=substr_replace($blankline,$avar[1],32,strlen($avar[1]));
	
  return($line);
}


Hier MEINE Lösung, vllt kanns jemande eleganter, aber hat mich so schon 15h gekostet. nuja, bin froh als überhaupt hinbekommen zu haben!
PHP:
function writeline($text)
  {
    GLOBAL $blankline;
    	if (strlen($text) >622 ){
		die ("Der Text ::: $text ::: ist nun wirklich zu lange, bitte weniger als 600 Zeichen verwenden");
					}
	if (strlen($text) <62 ){
		$line=substr_replace($blankline,$text,10,strlen($text));
     		return($line);
				}
	if (str_word_count($text) <1 ){
		die ("Bitte trenne den Text durch Leerzeichen, \n FALSCH: Counter.Strike.Special.Black-Edition.v1.5 \n Counter Strike Special Black-Edition v1.5   ");
				}
	$rechts= substr($text , 22 );
	$links = substr_replace($text,'',22,strlen($text));
	$avar  = wordwrap($rechts, 40, "\n", 1);
  	$avar  = explode("\n", $avar);
       $len   = count($avar); 	
		for ($i=0; $i<($len-1); $i++){
		if ($i < 1 )  		{		
					$line =substr_replace($blankline,$links.$avar[$i],10,strlen($links.$avar[$i]))."\n";
					continue;
						}
       	if (($i<=$len) ||($i >=1))	{
					$line.=substr_replace($blankline,$avar[$i],32,strlen($avar[$i]))."\n";
					continue;
						}
		}
					$line.=substr_replace($blankline,$avar[$i],32,strlen($avar[$i]));

  return($line);
}

hab nu den ersten teil der vorm " : " steht abgetrennt in linken und rechten stringteil und verarbeite beides getrennt.
auch die for schleife geht nu
 
Zuletzt bearbeitet:
Zurück