Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tekstin värittäminen PHP:llä

tapi0 [07.08.2006 20:32:16]

#

Mitenköhän PHP:llä saisi väritettyä tekstitiedostossa olevan tekstin niin, että eri merkeillä olisi omat värinsä.
Elikäs osaan kyllä include:lla tuoda foobar.txt:n php-scriptiin, mutta en osaa laittaa eri merkeille omia värejänsä. Merkit ja värit olisivat: ~ = blue, r = blue, p = yellow, ^ = grey, h = cyan, H = magenta, f = green, F = green ja s = brown. Mulla on pieni koodinpätkä joka ei toimi, jos joku viittisi korjata sen tai kirjoittaa kokonaan uuden niin olisin kiitollinen.

<?php

  colors["p"] = "yellow";
  colors["f"] = "green";
  colors["F"] = "green";
  colors["r"] = "blue";
  colors["~"] = "blue";
  colors["h"] = "cyan";
  colors["H"] = "magenta";
  colors["^"] = "grey";
  colors["s"] = "brown";

  function replaceChars($str) {
    return "<font color=\"{colors[$str]}\">$str</font>";
  }


  $filename = "outworld.txt";
  $dataFile = fopen($filename, "r");


  if ( $dataFile )
  {
   while (!feof($dataFile))
   {
       $buffer = fgets($dataFile, 4096);
       echo replaceChars($buffer);
   }

   fclose($dataFile);
  }
  else
  {
   die("fopen failed for $filename");
  }


 ?>

Antti Laaksonen [07.08.2006 21:29:01]

#

Ohjelman voi tehdä monella tavalla, mutta tässä on yksi ratkaisu:

<?php

// kirjaimet ja niiden värit
$varit["i"] = "red";
$varit["v"] = "green";
$varit["c"] = "blue";

// luetaan koko tiedosto muuttujaan
$teksti = file_get_contents("varitys.txt");
// muutetaan rivinvaihdot HTML-muotoon
$teksti = str_replace("\n", "<br>", $teksti);

// käydään läpi kaikki merkit
for ($i = 0; $i < strlen($teksti); $i++) {
    // tulostetaan merkki tarvittaessa väritettynä
    if ($varit[$teksti[$i]]) {
        echo "<font color=\"{$varit[$teksti[$i]]}\">{$teksti[$i]}</font>";
    } else {
        echo $teksti[$i];
    }
}

?>

Kirjaimia käsitellään yksi kerrallaan, jotta font-tagiin kuuluvia kirjaimia ei vahingossa väritettäisi.

tapi0 [08.08.2006 07:25:41]

#

Kiitos. Toi ei kyllä ihan kunnolla toimi...tulee r> ylimääräisenä. http://tapi0.emdia.fi/qm/outworld.php

Draiz [08.08.2006 10:47:28]

#

tapi0 kirjoitti:

Kiitos. Toi ei kyllä ihan kunnolla toimi...tulee r> ylimääräisenä. http://tapi0.emdia.fi/qm/outworld.php

Niin tulee, koska Antin koodi muuttaa \n-rivinvaihdon HTML-rivinvaihdoksi joka myös tulkitaan tekstiksi eli sekin käydään tuossa läpi jolloin HTML-tagi tuhoutuu.

Antti Laaksonen [08.08.2006 11:40:03]

#

Joo, tuo asia jäi minulta huomaamatta. Tässä on korjattu versio, jossa rivinvaihdot muutetaan vasta tulostusvaiheessa.

<?php

// kirjaimet ja niiden värit
$varit["i"] = "red";
$varit["v"] = "green";
$varit["r"] = "blue";

// luetaan koko tiedosto muuttujaan
$teksti = file_get_contents("varitys.txt");

// käydään läpi kaikki merkit
for ($i = 0; $i < strlen($teksti); $i++) {
    // tulostetaan merkki tarvittaessa väritettynä
    if ($varit[$teksti[$i]]) {
        echo "<font color=\"{$varit[$teksti[$i]]}\">{$teksti[$i]}</font>";
    } else if ($teksti[$i] == "\n") {
        echo "<br>";
    } else {
        echo $teksti[$i];
    }
}

?>

tapi0 [09.08.2006 00:59:54]

#

Suuri kiitos...nyt toimii täydellisesti :)

Vastaus

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

Tietoa sivustosta