PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   bestimmte zeichenanzahl... (http://www.selfphp.de/forum/showthread.php?t=5123)

Box 03.08.2003 18:02:25

bestimmte zeichenanzahl...
 
hi,

ich möchte einen string nach einer bestimmten anzahl von zeichen abbrechen, jedoch vorher noch zum vorherigen leerzeichen zurückspringen, damit das wort (wo die zeichenlänge erreicht wird) nicht auseinandergerissen wird.

ich hatte schon eine idee, dass ich das ganze in einer schleife (z.b. for oder while) einbaue und dann immer mit strlen() ob ich schon die zeichenlänge überschritten hab oder nicht.
ein zweites problem: ich kann nicht einfach <br> benutzen, da ich den text auf einen bild, mit hilfe von imagettftext(), erstellen möchte.

wer kann mir dabei helfen?

c4 03.08.2003 18:55:27

Ich kann Dir nur bei ersterem helfen:
PHP-Code:

<?php
$str
='Das ist ein längerer
Text ohne Zeilenumbrüchen, wo
sie niemand braucht und auch
wohl niemand setzen würde.'
;

$max_chars=100;
$words=explode(' '$str);

$str_neu='';
for (
$i=0$i<count($words); $i++) {
    if (
strlen($str_neu)+strlen($words[$i])<$max_chars) {
        
$str_neu.=$words[$i].' ';
    }
}

echo 
$str_neu;
?>

Die Zeichenkette wird an den Leerzeichen aufgetrennt und dann in einer Schleife überprüft, ob das nächste Wort noch angehangen werden kann ohne das Maximum zu überschreiten.
Das Ding ist aber noch nicht so toll. Schließlich wird HTML nicht beachtet. Sollte da mal ein Link dazwischen sein, dann sind 100 Zeichen schnell voll.

Box 03.08.2003 19:03:37

hmm ... ich hab mal die zeichenlänge max_chars mal auf 10 gesetzt. ausgabe: Das ist :(

c4 03.08.2003 19:10:46

Na ist doch richtig so!
das --> 3 Zeichen
--> Leerzeichen, ein Zeichen --> 4 Zeichen
ist --> 3 Zeichen --> 7 Zeichen
--> Leerzeichen, ein Zeichen --> 8 Zeichen
ein --> 3 Zeichen --> 11 Zeichen --> größer 10, also nicht mehr dabei.

Box 03.08.2003 19:40:26

das ist klar. meinte ja nur, dass der string nicht vollständig ausgegeben wird. muss ich wohl erst noch machen..

trozdem danke erstmal für die hilfe!

chris17 03.08.2003 19:50:43

Zitat:

das ist klar. meinte ja nur, dass der string nicht vollständig ausgegeben wird.
Hi Box,

aber genau das, wolltest Du doch, oder?!?

Box 03.08.2003 20:03:12

du hast es erfasst ;)

hatte gerade die idee bekommen in der schleife massenhaft abfragen einzubauen...
PHP-Code:

if(strlen($words[$x])<$max_chars){...}
if(
strlen("$words[$x] $words[$x+1]")<$max_chars){...}
if(
strlen("$words[$x] $words[$x+1] $words[$x+2]")<$max_chars){...}
... 

ist aber ziemlich umständlich :(

c4 03.08.2003 20:05:28

Ich verstehe Dein Problem nicht (mehr), Kiste. Das Skript da oben macht doch exakt das, was Du wolltest. Dachte ich. Denkt Chris.

Formuliere bitte nochmal, was Du willst und dann fangen wir einfach von vorne an.

Box 03.08.2003 20:12:57

allllsoooo...

ich lese auf einem textfile einen string aus und möchte diesen auf einen png-bild darstellen. dieser string darf aber eine bestimmte zeilenlänge nicht übersteigen, da der text sonst neben dem bild steht. <br> kann ich dabei nicht benutzen, da sonst auf den bild nur "<br>" steht. d.h. ich muss als erstes eine algorhytmus(?) finden womit ich den string auf die richtige länge bringe und als zweites eine schleife (oder etwas anderes) was den geteilten string auf den bild ausgibt.

ist die erklärung ausreichend?

c4 03.08.2003 20:38:10

Algorithmus ;)

Nehmen wir halt das:
PHP-Code:

<?php
$str
='Das ist ein Test zum testen eines
sinnlosen Testes, der ein Test für
selfPHP ist. Ist halt so ein Test.'
;

$str=str_replace("rn"' '$str);

$max_chars=20;
$words=explode(' '$str);

$i=0;
while (
true) {
    if (!isset(
$str_neu[$i])) {
        
$str_neu[$i]='';
    }

    
$j=0;
    while (
strpos($str' '$j)<=$max_chars && $j<strlen($str)) {
        
$j++;
    }

    
$str_neu[$i]=substr($str0$j-1);

    
$str=substr($str$jstrlen($str));

    if (
strlen($str)<$max_chars) {
        
$i++;
        
$str_neu[$i]=$str;
        break;
    }

    
$i++;
}

echo 
join("nn"$str_neu);
exit;
?>



Alle Zeitangaben in WEZ +2. Es ist jetzt 09:42:49 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.