Kirjoitan PHP ohjelmaa, jossa käyttäjä kirjoittaa tietoa text areaan, sitten tallennan sen MySql tietokantaan. Kun haen taas tiedon tietokannasta, ovat kaikki kappalemerkinnät hävinneet. Täytyykö minun todella käsitellä tietokannasta saatava tieto ohjelmallisesti niin, että saan myös kappalejaon näkyviin?
Mitä on hävinnyt? Kyllä tietokannasta tulee aivan sama data ulos kuin sisäänkin, joten vian on oltava PHP-koodissa.
Käyttäjän kirjoittama tieto tekstikenttään on mitä luultavimmin normaalia tekstiä, joten kappalemerkinnät ovat vain kaksoisrivinvaihtoja (\n). Kun ne tulostetaan tietokannasta sivulle, ne toki on koodissa mukana, mutta selain ei näytä niitä sivulla. Sinun pitää joko muodostaa rivinvaihdoista kappalejako erikseen tai simppelimmin vaihtaa \n -merkinnät <br /> -tageiksi nl2br() -funktiolla.
Kiitos!
Tuo kuulostaa aika yksinkertaiselta. Luulin jo, että joudun tekemään kosolti enemmän merkkijono muunnoksia, hakuja tms.
Tuo fuktio nl2br() on tosi helppokäyttöinen:
$temp = nl2br($rivi2);
printf($temp); // näin tulevat kappalejaot näkyviin
Onkohan noista PHP:n valmiista funtioista jossain listausta?
eija kirjoitti:
Onkohan noista PHP:n valmiista funtioista jossain listausta?
on, katso php.net -sivustolta.
Lista:
https://www.php.net/manual/en/funcref.php
josta löytyy esim. merkkijonoille omat funktiot:
https://www.php.net/manual/en/book.strings.php
eija kirjoitti:
Tuo fuktio nl2br() on tosi helppokäyttöinen:
$temp = nl2br($rivi2);
printf($temp); // näin tulevat kappalejaot näkyviinOnkohan noista PHP:n valmiista funtioista jossain listausta?
Siinä on vain se, että ne tosiaan ovat sitten vain rivinvaihtoja. Tilanteesta riippuen on tarpeellista muodostaa niistä asianmukainen kappalejako <p> -tageilla (esim. CSS -tyylitystä varten). Tällöin voi tehdä niin, että merkkijonon alkuun lisätään <p> -tagi, loppuun </p> -tagi. Sitten kaksoisrivinvaihdot (\n\n) korvataan str_replace() -funktiolla merkkijonolla </p><p> ja lopuksi ajetaan koko merkkijono nl2br() -funktion läpi.
Valitettavasti tuo ei ratko sitä, miten toimia useampien peräkkäisten rivinvaihtojen kanssa, esim.
<br /><br /><br />Testi
tulisi ulos
</p><p><br />Testi
Yksi ratkaisu tähän olisi tietysti estää kahta useammat peräkkäiset rivinvaihdot, mutta se ei välttämättä ole kaikissa tilanteissa paras ratkaisu. Jos taas yrittää muuttaa pitkän välin HTML:ksi ja CSS:ksi, niin nousee eteen ongelma siitä, miten näin tulisi tehdä. Pitäisikö esim.
<br /><br /><br /><br />
tulkita muotoon
A) </p><p style="margin-top:3em">
B) </p><br style="line-height:200%" /><p>
C) </p><br /><br /><p>
D) </p><p></p><p>
Olen joskus yrittänyt pähkäillä asiaa foorumiviestien muuntamisen yhteydessä ja sitten todennut, että ei maksa vaivaa. Varsinkin kun foorumiviesteihin tunkeutuu mukaan mm. lainauksia, koodiosuuksia jne.
Aihe on jo aika vanha, joten et voi enää vastata siihen.