Elikkä ongelma olisi tällainen: tulostan mysql-taulusta haetun muutujan echolla ja tarkoituksena olisi saada siihen mukaan myös rivinvaihdot, ettei koko homma tulisi yhteen pötköön. Homma toimii, kun taulun tekstin sekaan kirjoittaa
:t, mutta voisiko asian hoitaa pelkällä enterin painalluksella ilman, että käyttäjän tarvitsisi laittaa sinne itse ylimääräistä koodia?
HTML-muotoiset rivinvaihdot kannattaa lisätä vasta tulostusvaiheessa. Tekstissä olevat rivinvaihdot muutetaan siis <br>-tageiksi. Kun olet hakenut tekstin tietokannasta, tulosta se tähän malliin:
echo str_replace("\n", "<br>", $tulostettava_teksti);
Funktio jota haet lienee nl2br. Se lisää kaikkien tekstissä esiintyvien rivinvaihtojen eteen br:n. Jos se ei toimi, niin voit kokeilla str_replace:a. Tuossa esimerkki:
$teksti = "Tekstiä, \n jossa on\n rivinvaihtoja"; echo nl2br($teksti); //Tulostaa "Tekstiä, <br />\n jossa on<br />\n rivinvaihtoja";
Edit: Arvasin, että joku kerkeäisi ensin!
Edit2: Muistutan vielä, että Windowsissa rivinvaihtona toimii \r\n , joten tuo Antin funktio kuuluisi näin (myös br on xhtml-yhteensopivana):
echo str_replace("\r\n", "<br />", $tulostettava_teksti);
Ja jos otetaan vielä se Mäkkäri huomioon, niin:
echo ereg_replace("(\r\n|\n|\r)", "<br />", $tulostettava_teksti);
Ja jos tungetaan se hidas eregi ... ja hyödynnetään str_replacen array-tukea
echo str_replace(array("\r\n","\r","\n"), array("<br />\r\n","<br />\r","<br />\n"), $tulostettava_teksti);
Ja mitä Antin kommenttiin tulee, itse suosisin mieluummin lisäysvaiheessa kantaan br-tagin lisäämistä ja muokkausvaiheessa sen poistamista (vrt 1 x muunnos = z sekuntia vs. sivulatauksia x muunnos = z sekuntia x sivulatauksia).
Tällaisissa tapauksissa pienen pieni nopeusero tuskin on merkityksellinen, kun sivun latautuminen käyttäjälle vie kuitenkin aina oman aikansa. Itse pyrin säilyttämään tekstin tietokannassa mahdollisimman yksinkertaisessa muodossa siltä varalta, että muotoilua täytyy myöhemmin muuttaa.
leftover kirjoitti:
Ja jos tungetaan se hidas eregi ...
Juu, tästä on ollut useamman kerran puhetta. Aina sanotaan että se on hidas ja että str_replacella homma hoituu nopeammin. Mutta kukaan ei koskaan osannut pistää minulle numeroita, ja kun silmä ei nopeuseroa huomaa, niin eihän siinä sitten mitään. Mut äsken sit otin googlen kauniiseen käteen ja ryhdyin etsimään edes jonkinlaista vertailua. Joltain palstalta sitten löytyi henkilö, joka oli kokeillut käyttäjätiedoston kopelointia molemmilla menetelmillä. Str_replace vei aikaa 5 sekuntia, kun taas ereg puolitoista minuuttia.
Eli ilmeisesti tällaisissa yksinkertaisissa tapauksissa lienee viisainta tosiaankin 'tunkea se hidas eregi ...' :)
Tuollaisen nopeusvertailun voi tehdä itsekin. Kokeilin toistaa Irksomen ja leftoverin koodinpätkiä miljoona kertaa peräkkäin, ja mittasin siihen kuluneen ajan. Karu totuus näyttäisi olevan se, että str_replace on noin neljä kertaa nopeampi.
ereg_replace: 18,586 s str_replace: 4,891 s
Joka tapauksessa yksittäiseen korvaukseen kuluva aika on erittäin pieni, minun koneellani miljoonasosa noista.
.. ja teksti tulostuu kuten ajattelinkin. Kiitoksia vain kaikille!!
Aihe on jo aika vanha, joten et voi enää vastata siihen.