Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kirjainten korvaaminen, merkkien ohittaminen

Sivun loppuun

MIB [20.07.2009 01:25:38]

#

Hei!

Tein tälläisen pienen funktion sivujani varten:

<?php
function image($teksti) {
		$uusi = '';
		$teksti = strtolower($teksti);
		for ($i = 0; $i < strlen($teksti); $i++)
			$uusi .= "<img src=\"" . $teksti[$i] . ".gif>\n";
		$teksti = $uusi;
		echo $teksti;
}
image("Hello World!");
?>

Sivullani kirjaimet ovat "tyyliteltyjä" kirjainkuvia, enkä halua laittaa kaikki img-tageilla erikseen, niin tämä auttaa siinä. Ongelmana on sellainen asia, että haluaisin jotenkin tehdä sellaisen, että tämä ei korvaa < ja > merkkejä, eikä niiden välissä olevaa tavaraa, vaan noudattaa tageja, kuten <br>.

Voihan tehdä niin, että tulostaa ensin ihan normaalin tekstin, tulostaa echolla <br> ja aloittaa image funktion uudelleen, mutta tämä ei ole minusta kovin kätevä tapa.

Teuro [20.07.2009 09:18:05]

#

MIB kirjoitti:

Voihan tehdä niin, että tulostaa ensin ihan normaalin tekstin, tulostaa echolla <br> ja aloittaa image funktion uudelleen, mutta tämä ei ole minusta kovin kätevä tapa.

Eikä ole muutenkaan ollenkaan oikea tapa hoitaa tuota asiaa, koska img-tagi ei saa olla sivulla yksinään, joten laita se esimerkiksi p-tagin sisään. Tällöin kuvat rivittyvät oikein. Toinen vaihtoehto on laittaa kuvat listaan li-tageilla. Taulukkokin on tietysti yksi vaihtoeht, jos kuvia haluaa laittaa rinnakain.

MIB [20.07.2009 10:33:21]

#

Kiitos vinkistä, nyt korjasin sen asian, mutta vielä tuo toinen asia. Hoituisiko se vaikkapa säännöllisillä lausakkeilla?

Metabolix [20.07.2009 12:15:22]

#

Ilmeisesti vain teet asian jotenkin väärässä järjestyksessä. Mikset voi samalla käsittelykierroksella korvata kirjaimia kuvilla, hypätä erikoismerkkien yli ja lisätä rivinvaihtojen paikalle asiaankuuluvia HTML-tageja?

Minkähän takia lähes kaikilla foorumeillakäytetään br-tagia rivinvaihtoihin? Itse käyttäisin ehdottomasti kunnollista kappalejakoa eli p-tageja; harvoin on sellaista tilannetta, että tekstiä tarvitsisi rivittää muuten kuin kappaleisiin, ja tätä varten on kuitenkin erillisiä kooditageja ja muita.

Kuvatagistasi puuttuu muuten src-attribuutin lopettava lainausmerkki.

MIB [20.07.2009 12:39:44]

#

Metabolix kirjoitti:

Ilmeisesti vain teet asian jotenkin väärässä järjestyksessä. Mikset voi samalla käsittelykierroksella korvata kirjaimia kuvilla, hypätä erikoismerkkien yli ja lisätä rivinvaihtojen paikalle asiaankuuluvia HTML-tageja?

Ongelmana onkin tämä hyppääminen. Jostain olen lukenut miten saisin hypättyä ne yli, mutta ei tule mieleen. En tunne PHPn saloja niin hyvin, että osaisin heittää hatusta jonkin koodin tähän tilanteeseen. Tekevä oppii.

Metabolix kirjoitti:

Minkähän takia lähes kaikilla foorumeillakäytetään br-tagia rivinvaihtoihin? Itse käyttäisin ehdottomasti kunnollista kappalejakoa eli p-tageja; harvoin on sellaista tilannetta, että tekstiä tarvitsisi rivittää muuten kuin kappaleisiin, ja tätä varten on kuitenkin erillisiä kooditageja ja muita.

Onko jokin syykin, miksi br-tagi olisi "vanhentunut", ja pitäisi käyttää uudempia merkintöjä? Minusta nämä ajavat ihan saman asin, kuin käyttäisi p-tageja.

Metabolix kirjoitti:

Kuvatagistasi puuttuu muuten src-attribuutin lopettava lainausmerkki.

Kiitosta huomautuksesta, korjasin sen omaan tiedostooni koneella.

Antti Laaksonen [20.07.2009 13:09:51]

#

Seuraavassa koodissa on muuttuja $tagi, joka saa arvon tosi, jos tekstissä on merkki "<", ja arvon epätosi, jos tekstissä on merkki ">". Muuttujan arvo kertoo, kuuluuko tulostettava merkki tagiin.

<?php

function image($teksti) {
    $teksti = strtolower($teksti);
    for ($i = 0; $i < strlen($teksti); $i++) {
        $merkki = $teksti[$i];
        if ($merkki == "<") $tagi = true;
        if (!$tagi) {
            echo "<img src=\"$merkki.gif\">";
        } else {
            echo $merkki;
        }
        if ($merkki == ">") $tagi = false;
    }
}

image("Eka rivi<br>Toka rivi<br>Kolmas rivi<br>");

?>

Metabolix kirjoitti:

Minkähän takia lähes kaikilla foorumeillakäytetään br-tagia rivinvaihtoihin?

Luultavasti siksi, että rivinvaihtojen muuttaminen <br>-tagiksi tapahtuu yhdellä komennolla, mutta kappaleiden tunnistaminen ja <p>- ja </p>-tagien lisääminen olisi selvästi vaikeampaa.

Teuro [20.07.2009 13:55:35]

#

Toisaalta sisällön voi jakaa osiin explode("\r\n", $teksti); ja tekemällä tämän jälkeen kaikki kappaleet. Ei ole kuitenkaan olennaisesti hankalampaa kuin br-tagien kanssakaan. Samalla sivusta tullee hiukan "oikeampi".

MIB [20.07.2009 14:14:03]

#

Hyvin toimii tuo Antin esimerkki, mutta välilyönnit ovat vielä siinä ongelmana. En saanut muutettua niin, että myös välilyönnit ohitetaan.

Metabolix [20.07.2009 14:28:41]

#

<?php
$uusi = "";

$ohitetaan = false;
for ($i = 0; $i < strlen($teksti); ++$i) {
  if ($ohitetaan !== false) {
    $uusi .= $teksti[$i];
    if ($teksti[$i] == $ohitetaan) {
      $ohitetaan = false;
    }
    continue;
  }
  // Ohitetaan tagit
  if ($teksti[$i] == '<') {
    $uusi .= $teksti[$i];
    $ohitetaan = '>';
    continue;
  }
  // Ohitetaan &lt;, &amp; yms. merkinnät
  if ($teksti[$i] == '&') {
    $uusi .= $teksti[$i];
    $ohitetaan = ';';
    continue;
  }
  // Ohitetaan tuntemattomat merkit
  if (strpos("abcd...muunnettavat", $teksti[$i]) === false) {
    $uusi .= $teksti[$i];
    // ohitetaan
    continue;
  }
  $uusi .= "<img alt='{$teksti[$i]}' src='{$teksti[$i]}.gif' />";
}

Antti Laaksonen [20.07.2009 18:16:01]

#

MIB kirjoitti:

En saanut muutettua niin, että myös välilyönnit ohitetaan.

Yksi ratkaisu on luoda tyhjä kuva nimeltä ".gif".


Sivun alkuun

Vastaus

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

Tietoa sivustosta