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!!";}
$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?
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.
$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ää)
$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? :)
Eikai se nyt tämän ihmeellisempi ole?
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.
Kysytäänpäs vielä täällä, että miten voisi estä ascii koodit?
ASCII-koodit missä muodossa?
Heh...jäi itsellenikin epäselväksi. =)
Huomasin, kun kirjoitaa vieraskirjaan esim. tämän merkin:
niin se tulkitsee, että kentässä tekstiä. Se tallentaa viestin, mutta
vieraskirjassa kenttä on tyhjänä.
Funktio htmlspecialchars muuttaa tekstiä niin, että siihen kirjoitetut HTML-merkinnät näkyvät sellaisenaan. Esim 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...
Heh, totta. :)
Hmm... Mielestäni vieraskirjassani tuo on jo käytössä. Olen vain <b> ja <i> tagit sallinut. Pitänee asia vielä tarkistaa.
$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?
Ei se nyt ihan samaa asiaa aja...
htmlspecialchars: https://www.php.net/manual/en/function.
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.
Ah,ok.
Vähän provosoin, että mukamas ajaa saman asian. :) Eli kiitos faktatiedosta ja tutkin vielä nuo linkitkin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.