Rivin vaihto on esimerkiksi "\n\r" ja "\n". Mikä mahtaa olla vastaavat koodit välilyönnille?
Tarttis saada html-php-skriptihässäkkä ymmärtämään rivien alkuun laitetut välilyönnit...
Eipä taida olla tuollaista merkkikoodia... mutta "\x20" toimii myös.
Ihmettelen kovasti mikset voi vain käyttää sitä välilyöntiä: " " :D
Ja eikös tuo rivinvaihto ollut: "\r\n", eikä: "\n\r" ?, korjatkaa jos olen väärässä...
Olet oikeassa. Se on tietenkin \r\n.
Pelkän " " välilyönnin kanssa ilmenee sellainen ongelma, että jostain syystä skripti ei osaa tuon yhteydessä pakottaa enää rivinvaihtoa toimimaan.
Pitää testata tätä toista vaihtoehtoa.
Millainen koodi on kysymyksessä?
fwrite($kahva, (str_replace(array("\r\n", '\"', " " ), array("<br /> \r\n", '"', " "), $sisalto)));
Tuollainen koodin pätkä on nyt työn alla. Lomakkeesta luetaan tiedot ja niitten perusteella tehdään html-sivu. Html vain ei ymmärrä rivin alkuun laitettuja välilyöntejä, vaan tasaa kaikki rivit aina vasempaan reunaan. Pitäisi siis pakottaa kaikki välilyönnit näkyviksi.
Edit:
Mystisesti häviävien rivinvaihtojen ongelma ratkesi kun sijoitteli nuo korvattavat merkit vähän eri järjestykseen. Eli ensin pistetään välilyönnit paikoilleen ja vasta sitten puututaan rivinvaihtojen muuttamiseen. Tuossa koodiesimerkissä kun rivinvaihto on korvattu
<br />
tagilla, korvataan vahingossa myös tuolla tagin sisällä oleva välilyönti " ":llä, ja siitähän html-tulkit eivät pidä. :)
Nyt selaimella kaikki näyttää melko hyvältä, mutta editorissa html-koodin lukeminen on tuskaa kaikkien välilyöntien muututtua " ":ksi. No, kaikkea ei voi saada, eikä noita sivuja ole edes tarkoitus editoreilla pällistellä...
Laita välilyönnin tilalle html-entiteetti.
Plääh.
Eipä tietenkään toiminutkaan kaikki ihan niin hyvin kuin olin toivonut. Nyt menetettiin automaattinen rivitys. Ilmeisesti paljolti tuon non-breaking-spacen takia.
Mitenköhän sen saisi takaisin?
Välilyönnit kannattaa korvata niin, että ainoastaan rivin alussa sekä peräkkäin olevat välilyönnit muutetaan -merkeiksi. Tämä onnistuu muutamalla taiten laaditulla säännöllisellä lausekkeella.
<?php $sisalto = "Tässä tulee tavallista tekstiä. Nyt on neljän välilyönnin sisennys. Kaksi väliä sanojen välissä. Viimeinen rivi on taas ilman sisennystä."; // tämä funktio palauttaa yhtä monta -merkkiä // kuin sille annetussa merkkijonossa on merkkejä function välit($pohja) { return str_repeat(' ', strlen($pohja)); } // poistetaan lomakkeesta johtuvat \-merkit $sisalto = stripslashes($sisalto); // muutetaan rivinvaihdot <br>-tageiksi $sisalto = preg_replace("/\r?\n/", "<br>\n", $sisalto); // muutetaan rivien alussa olevat välilyönnit -merkeiksi $sisalto = preg_replace("/^( +)/me", "välit('\\1')", $sisalto); // muutetaan peräkkäin olevat välilyönnit -merkeiksi $sisalto = preg_replace("/( {2,})/e", "välit('\\1')", $sisalto); echo $sisalto; ?>
Skriptin tulos on tässä:
Tässä tulee tavallista tekstiä.<br> Nyt on neljän välilyönnin sisennys.<br> Kaksi väliä sanojen välissä.<br> Viimeinen rivi on taas ilman sisennystä.
Ok. Kiitti! Pitääkin kokeilla tuota!
Olisi tavattoman mielenkiintoista nähdä todellinen esimerkki, missä tätä käytetään.
Jotenkin ei heti mene järkeen, miksi rivejä pitää välilyönnein sisennellä. Tosin, olenhan vajaajärkinen...
Esimerkiks tämän keskustelupalstan kooditageilla merkatussa tekstissä.
Eikös se <pre> tagi korjaa tuon ongelman?
Eli ei tarvitse käyttää " " jonoja, vaan pelkkä " " normaali välilyönti riittää...
Jooh, mutta pre ei rivity automaattisesti (mikä tosin on joskus etu).
Tuon voisi nätisti toteuttaa CSS white-space:lla, mutta tietysti IE ei tajua. Eikä oikein Firefoxkaan.
white-space: pre-wrap; olisi makee...
Aihe on jo aika vanha, joten et voi enää vastata siihen.