Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Aukinaisten tagien sulkeminen

Akseli F [20.04.2006 19:29:21]

#

Eli siis minulla on tällainen vieraskirja viritys, jossa käyttäjä pystyy lisäämään i, b ja u tageja (Oikeasti noi kaikki olisivat hakasulkeissa, mutta jos laittaisin tässä ne niin...). Kuitenkin on mahdollista, että käyttäjä jättää auki jonkun tagin. Ne pitäisi tietenkin sulkea, ettei koko loppu sivu menisi pilalle. Tässä on oma viritykseni[/u]![/u]

<?php
function ch($mark, $message) {

$open = substr_count($message, "[{$mark}]");
$close = substr_count($message, "[/{$mark}]");


if($open != $close) {
if($close < $open) {

$ra = $open - $close;
for($i=0; $i < $ra; $i++) {
$message = $message . "[/{$mark}]";
}
} else {

$ra = $close - $open;

for($i=0; $i < $ra; $i++) {
$message = "[{$mark}]" . $message;
}

}

}
return $message;
}
?>

Tuota siis käytellään tähän tapaan:

<?php
$message = ch("i", $message);

$message = str_replace(array("[i]", "[/i]"), array("<em>", "</em>"), $message);

?>

Ongelma on se että tuo ei sulje noita tageja oikeassa järjestyksessä, mikäli sinulla on useampia tageja käytössä. (Esimerkissä oli pelkkä i-tagi, mutta oikeasti niitä on minulla enemmän)

edit: unoihtui, että putkassakin on käytössä samat tagit

tn [20.04.2006 22:19:58]

#

Jos kerran voidaan olettaa, että käyttäjä saattaa jättää tageja auki, niin mielestäni on myös mahdollista, että käyttäjä kirjoittaa tageja muutenkin väärään järjestykseen. Itse olen käynyt tagit yksitellen lävitse pitäen samalla kirjaa jo aukaistuista tageista. Näin lopputuloksesta on aina mahdollista tehdä oikeaoppinen. Huonona puolena tässä tavassa on (varmaankin) hitaus verrattuna sisäänrakennettujen funktioiden käyttöön.

Metabolix [20.04.2006 22:48:59]

#

Noin sen kummemmin miettimättä sanoisin, että preg_split hajottajaksi, jokaiseen palaan merkintä siihen vaikuttavista tageista, sitten pikaiset laskelmat siitä, milloin tagit pitää avata ja sulkea ja lopuksi koko teksti takaisin kokoon. Eihän noita kuitenkaan aivan järjettömästi tarvitse suorittaa, aina vain viestiä muokattaessa. Nopeampiakin tapoja varmasti löytyy, enkä näin äkkiseltään osaa tuonkaan toteutuksen hankaluutta arvioida.

Akseli F [21.04.2006 21:28:03]

#

Joo, kiitti vastauksista. Jään tähän miettimään parasta tapaa. Luultavasti luen kaikki tagit arrayhyn, sen sitten looppaan ja tarkistan onko tagit suljettu oikeassa järjestyksessä, mitä tageja puuttu. Sitten vaan laitan ne oikeisiin kohtiin...

panttu [21.04.2006 23:22:13]

#

Laiska pääsee vähemmällä ja käyttää taulukoita

<table>
 <tr>
  <td>
   <b>virheellinen tagi
  </td>
 </tr>
 <tr>
  <td>
    normaalia tekstiä
  </td>
 </tr>
</table>

sooda [21.04.2006 23:30:40]

#

Mmmm ah, preg <3 pääsee niin helpolla...

Jotenki näin näyttäis näin pikaisesti kokeillen toimivan preg_replacella: http://sooda.dy.fi/bbkode.php

Nii, ja käytetään semanttisesti korrekteja elementtejä, eikä mitään b:tä tms.

Vastaus

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

Tietoa sivustosta