Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: [ ] merkkien muuttaminen

Sivun loppuun

pistemies [19.06.2004 21:05:31]

#

Onko kukaan joutunut tekemisiin semmoisen ongelman kanssa, että jos joku haluaa kirjoittaa viestiin koodia, joka sisältää muotoilu-tageja, esim:

[url][/url][b][/b]

Miten ne saa tulostettua viestissä niin ettei ohjelma muuta niitä esim. linkeiksi, taulukoksi tai muuksi?

[table][tr][td][b]Miten olette hoitanut tuon homman?[/b][/td][/tr][/table]

Edit: Tässäkin on vähän "ylimääräisiä muotoiluja", joita ei näy tuolla ohjeissa. :) Tarkoitan sitä, miten saa tulostettua noin?

Teme [20.06.2004 14:23:10]

#

Jos oikein muistan niin tuo onnistuu str_replace(); -funktiolla. Funktion ensimmäinen parametri on merkkijono, jotka korvataan. Toinen parametri on merkkijono, jolla ne korvataan. Ja viimeinen parametri on teksti, josta korvattavaa etsitään. Esimerkiksi sinun tapauksessa homma voisi mennä näin:

<?php

$temp = str_replace("[table]", "<table border='0'", $teksti);
$temp = str_replace("[tr]", "<tr>", $teksti);
$temp = str_replace("[td]", "<td>", $teksti);
$temp = str_replace("[b]", "<b>", $teksti);
$temp = str_replace("[/b]", "</b>", $teksti);
$temp = str_replace("[/td]", "</td>", $teksti);
$temp = str_replace("[/tr]", "</tr>", $teksti);
$temp = str_replace("[/table]", "</table>", $teksti);

echo $temp;

?>

Tuossa pätkässä muuttuja $teksti sisältää tekstin, joka pitää tutkia. Muuttuja, johon muutettu teksti laitetaan, on $temp.

Jos olet tekemässä boardia yms, niin suosittelen viestin tallentamista tietokantaan / flatfileen siinä muodossa, miten sen kirjoittaja on sen kirjoittanut. Sitten vasta sivun latausvaiheessa PHP muuttaa kooditagit tuolla str_replace(); -funktiolla.

Kts: https://www.php.net/manual/en/function.str-replace.php

kenkku [20.06.2004 14:24:26]

#

Muista tarkistaa, löytyykö esimerkiksi lihavoinnille lopetustagi, sillä muuten se sotkee koko sivun. (pahimmassa tapauksessa)

pistemies [20.06.2004 15:09:07]

#

Kiitoksia vastauksista. Saattaa olla, että käsititte väärin tuon minun hataran kysymyksen.

Olen tehyt tuon muotoilun preg_replacella ja str_replacella. Tarkoitin sitä, että viestinkirjoittaja kirjoitaa code-tagien väliin jotakin muotoilu-tageja, joita ei ole tarkoitettu muotoilemaan viestiä, vaan olemaan osa koodia.

Esimerkki:

[b]tässä näkyy b-tagi eikä lihavointi[/b]

Sain tuon nyt toimimaan jollakin tavalla, että ei näytä code-tagien välissä esim. tuollaista muotoilua....

Tempfile [20.06.2004 21:57:36]

#

Helpoiten se kai käy, kun vain jätät tuon string_replacen kokonaan ajamatta vaikka tietyn elementin sisällä olevalle teksille. Voit kokeilla vaikka erotella sen toiseen muuttujaan, ajaa lopuille string_replacet ja sitten ympätä tekstin taas takaisin.

pistemies [21.06.2004 11:57:10]

#

Tein tämän mutkikkaasti: erottelin

[codes][/codes]

-merkkien välisen tekstin $sisalto muuttujaan, jonka sisällön käsittelin str_replacella niin ettei siihen jäänyt muotoilu-tagien merkkijonoja ja lopuksi, kun koko viestin muotoilut oli tehty, muutin ne uudelleen muotoilu-tageiksi... :9

Huono puoli on ainakin se, että siinä on melkoisesti koodia...

Jos oppisi käyttämään preg_replacea paremmin, niin se lyhentäisi koodia huomattavasti...

Esimerkiksi merkkijono:

[table bgcolor=black]

Miten tuon muuttaa preg_replacessa muotoon

<table bgcolor="black"><tr><td>

Siinä tuo taustanväri nimittäin on viestin kirjoittajan valitsema mikä tahansa html-sopiva väri tai värinumero.

pistemies [21.06.2004 14:49:57]

#

Kysytään samantien seuraavaa, vielä visaisempaa:

[table border=15?bgcolor=E17100?bordercolor=brown]
Tekstiä
[/table]
<table border="6" bgcolor="E17100" bordercolor="brown"><tr><td>
Tekstiä
</td></tr></table>

Miten tuon saa preg_replacella muutettua noin?

Olga [21.06.2004 15:05:03]

#

Heitän hatusta, mutta kokeileppa seuraavaa:

$data = preg_replace("/\[table border=(.*?)\?bgcolor=(.*?)\?bordercolor=(.*?)\](.*?)\[\/table\]/i", "<table border=\"$1\" bgcolor=\"$2\" bordercolor=\"$3\"><tr><td>$4</td></tr></table>", $data);

pistemies [21.06.2004 15:54:31]

#

toimii!!

Kiitos paljon.... Olli
:?

pistemies [21.06.2004 20:30:57]

#

Huomasin juuri preg_replacessa uuden piirteen:

Mitään muotoilu-tageja, joiden muotoilu suoritetaan preg_replacella, ei tarvitse muuttaa str_replacella ennen muotoilua, kun ne ovat code-tagien välissä.

Oliko selitetty monimutkalaisesti?


Sivun alkuun

Vastaus

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

Tietoa sivustosta