Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Välilyönnin koodaus

Sivun loppuun

Marazo [30.01.2005 20:15:06]

#

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...

T.M. [30.01.2005 20:18:00]

#

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ä...

Marazo [30.01.2005 20:27:01]

#

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.

Antti Laaksonen [30.01.2005 20:37:36]

#

Millainen koodi on kysymyksessä?

Marazo [30.01.2005 20:44:03]

#

fwrite($kahva, (str_replace(array("\r\n", '\"', " " ), array("<br /> \r\n", '"', "&nbsp;"), $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 "&nbsp":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 "&nbsp":ksi. No, kaikkea ei voi saada, eikä noita sivuja ole edes tarkoitus editoreilla pällistellä...

Meitsi [30.01.2005 20:59:48]

#

Laita välilyönnin tilalle &nbsp; html-entiteetti.

Marazo [30.01.2005 21:07:23]

#

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?

Antti Laaksonen [30.01.2005 21:16:19]

#

Välilyönnit kannattaa korvata niin, että ainoastaan rivin alussa sekä peräkkäin olevat välilyönnit muutetaan &nbsp;-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 &nbsp;-merkkiä
// kuin sille annetussa merkkijonossa on merkkejä
function välit($pohja) {
    return str_repeat('&nbsp;', 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 &nbsp;-merkeiksi
$sisalto = preg_replace("/^( +)/me", "välit('\\1')", $sisalto);
// muutetaan peräkkäin olevat välilyönnit &nbsp;-merkeiksi
$sisalto = preg_replace("/( {2,})/e", "välit('\\1')", $sisalto);

echo $sisalto;

?>

Skriptin tulos on tässä:

Tässä tulee tavallista tekstiä.<br>
&nbsp;&nbsp;&nbsp;&nbsp;Nyt on neljän välilyönnin sisennys.<br>
&nbsp;&nbsp;&nbsp;&nbsp;Kaksi&nbsp;&nbsp;väliä&nbsp;&nbsp;sanojen&nbsp;&nbsp;välissä.<br>
Viimeinen rivi on taas ilman sisennystä.

Marazo [30.01.2005 21:35:09]

#

Ok. Kiitti! Pitääkin kokeilla tuota!

wwwapu [31.01.2005 19:00:34]

#

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...

Blaze [31.01.2005 20:04:22]

#

Esimerkiks tämän keskustelupalstan kooditageilla merkatussa tekstissä.

T.M. [01.02.2005 16:11:56]

#

Eikös se <pre> tagi korjaa tuon ongelman?
Eli ei tarvitse käyttää "&nbsp;" jonoja, vaan pelkkä " " normaali välilyönti riittää...

Blaze [01.02.2005 16:20:59]

#

Jooh, mutta pre ei rivity automaattisesti (mikä tosin on joskus etu).

wwwapu [02.02.2005 21:04:30]

#

Tuon voisi nätisti toteuttaa CSS white-space:lla, mutta tietysti IE ei tajua. Eikä oikein Firefoxkaan.
white-space: pre-wrap; olisi makee...


Sivun alkuun

Vastaus

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

Tietoa sivustosta