Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tiettyjen sanojen esto PHP:ssä

Sivun loppuun

Antti80 [04.02.2007 14:14:36]

#

Miten voisin estää tiettyjä sanoa, että ne eivät tallentuisi vieraskirjaani. Siis koko viestiä ei tallenneta, jos se sisältää tiettyjä sanoa.
Voisin esim. estää tiettyjen kirosanojen tallentamisen tai voisi tätä käyttää hyväksi vaikka estämällä sanoja, joita on yleensä roskaposteissa. Oli miten oli niin millä tavalla/koodilla tämän toteuttaisi?

Se olisi varmasti tämän tyylinen, mutta mikä laitettaisiin strip_tags:in tilalle? Ja voisiko sanat vain pilkulla erotella tuohon, mitä ei hyväksytä?

$viesti = strip_tags ($_POST['viesti'], '<b><i>');
}else {echo "Kirosanoja, viestisi ei tallentunut vieraskirjaan!!";}

Antti80 [04.02.2007 18:01:54]

#

$viesti = strpos($viesti, "http://";);
if ($viesti === false)
{ // Talletetaan viesti.
} else {
Viestisi tulkittiin spämmiksi. Jos se ei ole sitä, ota yhteyttä ylläpitoon.
}

En saanut toimimaan, mutta tuossa ideaa?

Antti Laaksonen [04.02.2007 18:05:20]

#

Sanoja voi etsiä vaikkapa funktiolla str(i)str, joka palauttaa arvon false, mikäli merkkijonossa ei ole tiettyä sanaa. Kun kelpaamattomat sanat ovat taulukossa, niitä voi etsiä yksi kerrallaan merkkijonosta. Jos funktion nimessä on kirjain i, funktio ei kiinnitä huomiota kirjainkokoihin.

<?php

// tutkittava teksti
$teksti = "NEW CAR FOR FREE!";
// kelpaamattomat sanat
$sanat = array("buy", "free", "only");

$kelpaa = true;
// tutkitaan sanat
for ($i = 0; $i < count($sanat); $i++) {
    if (stristr($teksti, $sanat[$i]) !== false) {
        $kelpaa = false;
        break;
    }
}

// ilmoitetaan tulos
if ($kelpaa) {
    echo "Teksti on kelvollinen.";
} else {
    echo "Teksti ei kelpaa.";
}

?>

Tätä koodia kannattaa käyttää harkiten, sillä viesti voi olla täysin asiallinen, vaikka siinä olisi epäilyttäviä sanoja.

Muoks. Funktio strpos kelpaa myös, ja sen voi liittää yllä olevaan koodiin samalla tavalla.

Antti80 [04.02.2007 18:13:24]

#

$pos = strpos($viesti, "viagra");
if ($pos === false)
{ // Talletetaan viesti.
} else {
die('Oho! Viestisi tulkittiin spämmiksi. Jos se ei ole sitä, ota yhteyttä ylläpitoon.');
}

Tuolla tavalla sain toimimaan! :)
Lienee ihan ok? Voikohan tohon pilkulla vaan erottaa sanoja mitä se ei hyväksy jottei tarvitsisi laittaa koko koodinpätkää erikseen joka sanalle?
-----------------

Nyt vasta luin viestisi AL. Kiitos tuosta esimerkistä.
(Jes, toki pitää olla varovainen mitä sanoja kieltää)

Antti80 [05.02.2007 10:49:06]

#

$pos = strpos($viesti, "viagra");

Voiko tuohon lisätä pilkulla vaan eri sanoja? :)

AL: Oliko tuo sinun koodi vain esimerkki, mitä minun pitää soveltaa tässä tapauksessa? $teksti = "NEW CAR FOR FREE!"; // Minähän en tiedä, mikä se lause on mitä vkirjaan kirjoitellaan? Ja/eli en halua, että vieraskirja tekstiä tallennetaan ollenkaan tietokantaan jos se sisältää kielletyn sanan. Eli laittaisin $teksti = "$teksti";
Meninkö ihan sekaisin? :)

Legu [05.02.2007 11:05:06]

#

Eikai se nyt tämän ihmeellisempi ole?

$teksti = $_POST["viesti"];
// ... tarkistus ...
if ($kelpaa) {
    // tietokantaan tallennus
    echo "Viesti tallennettu";
} else {
    echo "Viesti tulkittiin spämmiksi";
}

El-Ejecutor [05.02.2007 11:27:21]

#

Antti80 kirjoitti:

Voiko tuohon lisätä pilkulla vaan eri sanoja? :)

Tee kuten Antin esimerkissä ja lisää kaikki kielletyt sanat yhteen taulukkoon, jota sitten käytät funktiossa. Esimerkistä:

//taulukko:
$sanat = array("buy", "free", "only");

//etsitään kiellettyjä sanoja:
if (stristr($teksti, $sanat[$i]) !== false) jne jne

Kiellettyjä sanoja on helpompi hallita pitämällä niitä yhdessä arrayssä. Siitä voit sitten lisätä tai poistella niitä mielesi mukaan.

Antti80 [25.02.2007 12:32:43]

#

Kysytäänpäs vielä täällä, että miten voisi estä ascii koodit?

tgunner [25.02.2007 12:45:32]

#

ASCII-koodit missä muodossa?

Antti80 [25.02.2007 12:56:34]

#

Heh...jäi itsellenikin epäselväksi. =)
Huomasin, kun kirjoitaa vieraskirjaan esim. tämän merkin: &nbsp;
niin se tulkitsee, että kentässä tekstiä. Se tallentaa viestin, mutta
vieraskirjassa kenttä on tyhjänä.

Antti Laaksonen [25.02.2007 19:49:25]

#

Funktio htmlspecialchars muuttaa tekstiä niin, että siihen kirjoitetut HTML-merkinnät näkyvät sellaisenaan. Esim &nbsp; näkyy juuri niin kuin se on kirjoitettu eikä se muutu välilyönniksi. Samoin kaikki HTML-tagit tulevat näkyviin sellaisenaan. Tämä on helppo tapa varmistaa, että vieraskirjaa ei voi sotkea HTML:n avulla. Sellaisen tarkistuksen tekeminen olisi jo vaikeampaa, joka ymmärtää, onko viestissä järkeä vai ei...

Antti80 [26.02.2007 12:30:33]

#

Heh, totta. :)
Hmm... Mielestäni vieraskirjassani tuo on jo käytössä. Olen vain <b> ja <i> tagit sallinut. Pitänee asia vielä tarkistaa.

Antti80 [26.02.2007 19:40:25]

#

$nimi = strip_tags ($_POST['nimi']);
$viesti = strip_tags ($_POST['viesti'], '<b><i>');
}
else
 {echo "Spammer!";}

Minulla on tuolla tavalla, eikö aja saman asian kuin htmlspecialchars?

Sami [26.02.2007 20:18:36]

#

Ei se nyt ihan samaa asiaa aja...
htmlspecialchars: https://www.php.net/manual/en/function.htmlspecialchars.php
strip_tags: https://www.php.net/manual/en/function.strip-tags.php

Kannattaa katsoa nuo jos haluat tietää tarkemmin niiden toiminnan, mutta lyhyesti htmlspecialchars muuttaa kaikki merkit, joilla on html:ssä jokin erityismerkitys, html-merkeiksi (&XXXX;). strip_tags taas poistaa kaikki tagit tekstistä, eli käytännössä kaikki merkkien < ja > välissä olevan.

Antti80 [26.02.2007 20:23:37]

#

Ah,ok.
Vähän provosoin, että mukamas ajaa saman asian. :) Eli kiitos faktatiedosta ja tutkin vielä nuo linkitkin.


Sivun alkuun

Vastaus

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

Tietoa sivustosta