Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Rivinvaihto tulostettaessa

spexi [10.04.2006 12:29:43]

#

Eli, homman nimi on se että kun teen sivuille uutis-osiota, ja koneessa ei ole MySQL:ää tai muuta tietokantaa, niin uutiset on tallennettava tiedostoon. Ajattelin tehdä uutisien luomisiin kappaleenvaihdon, eli kun kirjoittaa textareaan uutisen keskelle haluamaansa väliin esim == -merkit, niin sitten uutista luettaessa se osaisi korvata == rivinvaihdolla. Miten tälläinen onnistuu? Sillä jos uutista kirjottaessa lyö vain enteriä tehdäkseen rivinvaihdot, fgets-funktio (jolla tiedostoa luen) ei osaa enää ottaa enterin painalluksen jälkeisiä tekstejä talteen muuttujaan.

jideko [10.04.2006 12:46:57]

#

Parhaiten homma toimii siten, että textareaan vaan lyöt niitä enttereitä niin paljon kun haluat ja sitten tiedostoon kirjoitettaessa korvaat ne rivinvaihdot(\n) <br> tagilla.

Yleensä itse luen tekstit file funktiolla. Tekee arrayn tiedoston riveistä. Sitten for tai foreach funktiolla saa kätevästi ne tulostettua.

esim:

<?php
$uutinen=$_POST["uutinen"];

$uutinen= str_replace("\r\n", "<br>", $uutinen);
$uutinen=stripcslashes($uutinen);

$avattu=fopen("tiedosto.txt", "a");
fwrite($avattu, $uutinen."\n");
fclose($avattu);

?>

Laitoin tuohon vielä stripcslashesin. Estää ylimääräset kenoviivat.

spexi [10.04.2006 14:00:15]

#

Joo, nyt se teki enterinlyönneistä kyllä <br>, mutta sitten uutista tulostettaessa sivu tulostaa "Uutisen sisältöä tähän<br><br>Lisää sisältöä tähän<br><br>" eli siis tulostaa tagit sellaisenaan. Tämä sitten jossain php:n konfauksessa että tagit eivät toimi? Kysymys nyt sitten enää on se, että miten voidaan lukea tekstiä ja korvata sen sisältämiä tageja, esim että "if lause sisältää <br> then \n" tms? PHP:n konffausta tuskin voin muuttaa, joten pitää tehdä tuo tällä tavalla, vielä jos joku osaisi kertoa miten tapahtuu..

tsuriga [10.04.2006 15:31:37]

#

Tuohon rivinvaihtojen muuttamiseen html-rivinvaihdoiksi on myös oma funktionsa, nl2br(). Jotkut suosivat käyttäjien tekstien kirjoittamista muistiin sellaisenaan, sillä se antaa mahdollisesti useampia mahdollisuuksia ja yksinkertaisempia ratkaisuja datan esittämiseen. Ehkä. Jos tarvitsee useimmiten vain sitä yhdenlaista tiettyä tulostusta, en näe syytä, miksi käyttäjän syötteitä ei voisi muuttaa jo tallennusvaiheessa - säästyypähän prosessoriaikaa. Ja taas, viitataan niihin taulukon arvoihin heittomerkeillä ('), ei lainausmerkeillä ("), käytännöllisyyssyistä.

Antti Laaksonen [10.04.2006 21:58:03]

#

Tiedostossa rivinvaihdot on paras muuttaa jo tallennusvaiheessa, koska muuten tiedosto sekoittuu.

Funktio htmlspecialchars muuttaa HTML-tagit sellaiseen muotoon, että ne näkyvät selaimessa muuttumattomina. Käytännössä esim. tagi <br> muuttuu muotoon &lt;br&gt;.

Tämän vuoksi uutisjärjestelmää pitää muuttaa niin, että uutista tallennettaessa muutetaan ensin tagit ja sitten vasta muutetaan rivinvaihdot. Muuten rivinvaihdot näkyvät väärin.

Funktioiden kutsujärjestys on siis:
1. htmlspecialchars
2. nl2br tai str_replace

Funktio htmlspecialchars on nyt luultavasti uutisen näytössä, se pitää siirtää jo tallennukseen.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta