Wordwrapilla onnistuu kätevästi merkkijonon katkaisemeni vaikka 30 merkin kohdalta ja aloittaa uudelta riviltä, mutta millä olisi mahdollista katsoa 30 merkin jälkeen oleva seuraava piste tai tyhjä väli.
strpos?
merkkijono = abc def ghi jkl mno pqr stu vwx yzå äö
eli haluamani tulos olisi, katkaistaan merkkijono jokaisen 5 merkin välin jälkeen
abc def
ghi jkl
jne..
Äkkiseltään katsottuna tämä ei onnistu strpos:silla, voin olla kuitenkin väärässä.
esimerkki 2.
merkkijono = abcdefghijklmnopqrstuvwxyzåäö
abcde
fghij
jne...
Ongelmani tässä on, että jos sana on vaikka koirat, kävisi mielestäni wordwrapilla näin:
koira
t
Älä katko niin pieniä sanoja? Ei mitään järkeä tuollaisessa...
tuntuu vähän että tää itse ongelma on ongelma vain teoriassa, vaikka oikeassa tilanteessa moista ei tapahtuisi, esim vähän väliä saa kuulla "miks mun taulukko venyy ku kirjotan sinne "gfdjkgdsjklgdsgdsjklgdsgds ..." vaik oikeesti ei tommosii kirjotella mihinkään...
Jos määrittelet haluamasi jakotavan tarkasti, sen voi varmasti myös toteuttaa.
Miksi esimerkissä 1 rivillä saa olla 7 merkkiä (abc def), mutta esimerkissä 2 uudelle riville täytyy siirtyä heti 5 merkin jälkeen?
Funktio wordwrap ei katkaise sanaa, jos katkaisua ei salli neljännessä parametrissa.
T.M.
Katkaisu tapahtuu realistisesti 100 merkin kohdalla. Viidellä merkillä saa vain helpommin esimerkin.
Antti. Huonosti esimerkkini selitin.
1234567 8
Eli tarkoitus olisi katkaista aina merkijono viiden merkin jälkeen tulevan välin kohdalta. Eli tämän esimerkin mukaan sana katkaistaisiin 7 jälkeen koska sen jälkeen tulee ensimmäinen väli viiden merkin jälkeen.
12345 67
Tämä taas katkaistaisiin 5 jälkeen, koska se on merkkijonon pituus jonka jälkeen etsitään ensimmäinen väli ja sehä tuleekin heti.
Eli tarkoitus oikeassa toiminnossa on tehdä tämä tarkistus joka sadan merkin jälkeen.
Yksi tapa on erottaa merkkijonon sanat taulukkoon ja lisätä niitä uuteen merkkijonoon rivi kerrallaan. Aina kun yhdelle riville on lisätty niin paljon sanoja, että rivin merkkien määrä ylittää halutun merkkien määrän, uuteen merkkijonoon tulee rivinvaihto.
<?php $teksti = "Tämä teksti jakautuu kolmelle riville."; $uusi = ""; $osat = explode(" ", $teksti); $laskuri = 0; for ($i = 0; $i < count($osat); $i++) { $uusi .= $osat[$i] . " "; $laskuri += strlen($osat[$i]) + 1; if ($laskuri >= 10) { $uusi .= "\n"; $laskuri = 0; } } echo "<pre>----------\n$uusi</pre>"; ?>
Koodi hieman lyhentyy säännöllisen lausekkeen avulla:
<?php $teksti = "Tämä teksti jakautuu kolmelle riville."; $uusi = preg_replace("/.{9}\\S* /", "\\0\n", $teksti); echo "<pre>----------\n$uusi</pre>"; ?>
Molemmissa yllä olevissa esimerkeissä rivi katkaistaan 10 merkin jälkeen.
kiitoksia. Pitääpäs kokeilla tuota.
Aihe on jo aika vanha, joten et voi enää vastata siihen.