Eli minulla on tälläinen funktio kutsu ja funktio PHP:llä tehty
<?php function siivoa_syote($syote){ $syote = get_magic_quotes_gpc() ? $syote : mysql_real_escape_string($syote); $syote = strip_tags($syote); $syote = htmlspecialchars($syote); $syote = trim($syote); return $syote; } siivoa_syote($msg); ?>
mutta se ei estä HTML tagien laittamista. Ja se vielä tulostaa ne.
Pelkkä funktiokutsu ei riitä, vaan tulos tulee sijoittaa johonkin muuttujaan ennen käsittelyä. strip_tags funktio on ehkä tarpeeton.
Lisäksi teet kaksi aivan eri asiaa samalla kertaa. Escapetus (mysql_real_escape_string) pitää tehdä ennen tietokantaan tallentamista ja htmlspecialchars vasta ennen tulostamista sivulle. Toki nämä on mahdollista tehdä samallakin kertaa, mutta yleensä on tyhmää tallentaa tietokantaan valmiiksi käsiteltyä dataa, jos on pienikin mahdollisuus, että sitä haluttaisiin muokata vielä myöhemmin.
Juu, mut jos teen noin ni se ei mee yksiin mun BBC koodi enginen kans. :o
<?php function siivoa_syote($msg){ $msg = str_replace("\n", "<br>", $msg); $msg = str_replace("[B]", "<b>", $msg); $msg = str_replace("[/B]", "</b>", $msg); $msg = str_replace("[I]", "<i>", $msg); $msg = str_replace("[/I]", "</i>", $msg); $msg = str_replace("[U]", "<u>", $msg); $msg = str_replace("[/U]", "</u>", $msg); $msg = str_replace("[b]", "<b>", $msg); $msg = str_replace("[/b]", "</b>", $msg); $msg = str_replace("[i]", "<i>", $msg); $msg = str_replace("[/i]", "</i>", $msg); $msg = str_replace("[u]", "<u>", $msg); $msg = str_replace("[/u]", "</u>", $msg); $msg = str_replace("[CENTER]", "<center>", $msg); $msg = str_replace("[/CENTER]", "</center>", $msg); $msg = str_replace("[center]", "<center>", $msg); $msg = str_replace("[/center]", "</center>", $msg); $msg = str_replace("[/url]", "</a>", $msg); $msg = str_replace("[url=", '<a href="', $msg); $msg = str_replace("[/URL]", '<a href="', $msg); $msg = str_replace("[URL=", '<a href="', $msg); $msg = str_replace("]", '">', $msg); $msg = get_magic_quotes_gpc() ? $msg : mysql_real_escape_string($msg); $msg = strip_tags($msg); $msg = htmlspecialchars($msg); $msg = trim($msg); return $msg; } ?>
Ei näy vahvennuksia yms. Syy on tietysti se, että tuo loppu järjestelmä estää sen, mutta mikä neuvoksi.
mika132 kirjoitti:
Syy on tietysti se, että tuo loppu järjestelmä estää sen, mutta mikä neuvoksi.
Mieti, mitä koodi tekee. Katso vaikka PHP.netistä, mitä mikäkin funktio tekee. Missä vaiheessa korvaukset pitää tehdä?
https://www.php.net/strip_tags
(https://www.php.net/htmlspecialchars)
Eihän BBcodea ajeta käyttäjän syötteen siivouksen aikana? Sehän tulisi ajaa vasta kun halutaan tulostaa kamaa näytölle. Jos katsos ensin muunnat käyttäjän tekemätä muotoilut html-tageiksi ja sitten poistat ne, niin olisiko jossakin kohdassa hiukan korjaamista. Sanoin jo yllä, että strip_tags funktio on turha tuossa, kun kerran ajat htmlspecialchars funktion.
mika132 kirjoitti:
Juu, mut jos teen noin ni se ei mee yksiin mun BBC koodi enginen kans. :o
Silloinhan se nimenomaan menee, kunhan ajat myös BBCode-jutut vasta tulostusvaiheessa. (Edelleen sama perustelu: eihän viestiä voi muokata, jos sen BBCode-tagit on jo muutettu HTML:ksi!)
Ja ota nyt järki käteen tuon funktioiden järjestämisen kanssa, kuten jo trilog sanoikin. Inspiraatiota ongelman korjaamiseen voit hakea seuraavasta yksinkertaistetusta versiosta:
<?php $x = 1; $x = 2; echo $x; /* Miksei tämä tulosta 1? */
Aihe on jo aika vanha, joten et voi enää vastata siihen.