Starší komentáře ke článku: Ošetřujeme příspěvky návštěvníků stránek
Zpět na článek | Úvodní stránka Interval.cz
Datum vložení: 9.11.2002 14:56:47
Rozhodne se necitim byt odbornikem na PHP, ale spoustu vesi bych udelal jinak, doufam, ze daleko jednoduseji.
---------------
1. - Proc psat seznam takto slozite:
---
<?php
$profan[]='hloupý';
$profan[]='hloupy';
...
?>
---
IMHO by bylo daleko snadnejsi pouzit jen
---
hloupý
hloupy
---
A pak si ten soubor nacist do pole pomoci "$profan=file('./badwords.php');". Pak by to asi chtelo celou array projit a pomoci "trim()" odstranit pripadne mezery a konce radku, ktere by tam mohly byt.
A to nemluvim o tom, ze by klidne mohlo stacit psat vsechny slova s diakritikou, pak si jen pomoci PHP vsechny projit, pokud by obsahovaly nejaky znak s diakritikou, pridat je na konec array bez ni.
---------------
2. - Proc pouzivat "strstr()" a jeste k tomu "strtoupper()", kdyz od PHP verze 3.0.6, mame k dispozici funkci "stristr()", coz neni nic jineho, nez "Case-insensitive strstr()".
<a href='http://www.php.net/manual/cs/function.stristr.php' target='_blank'>http://www.php.net/manual/cs/function.stristr.php</a>
A vubec, proc pouzit na zjisteni, zda se jeden retezec nachazi ve druhem funkci "strstr()"? Proc nepouzit "strpos()"?
---------------
3. - Proc pouzivat podminku "(strtoupper($censored)==strtoupper($sWord))", kdyz by bylo vhodnejsi pouzit "(!strcasecmp($censored, $sWord)"?
<a href='http://www.php.net/manual/cs/function.strcasecmp.php' target='_blank'>http://www.php.net/manual/cs/function.strcasecmp.php</a>
---------------
4. - Jsou ty regularni vyrazy v tomto pripade opravdu nutne? Priznam, ze se v nich prilis neorientuji, ale funkce "str_replace()" preci udela totez. Jen tusim, ze neni 'case-insensitive', coz by v tomhle pripade vadilo, takze jsem asi mimo.
<a href='http://www.php.net/manual/cs/function.str-replace.php' target='_blank'>http://www.php.net/manual/cs/function.str-replace.php</a>
Datum vložení: 1.9.2003 22:39:21
Ad. 2 - StrPos má jednu obrovskou nevýhodu - pokud se bude hledaný řetězec vyskytovat na začátku vyhledávaného řetězce, vrátí pozici 0 a vy víte píp jestli tam není nebo je na začátku... Docela jsem se s tím nazlobil než sem se píp a napsal si hstrpos:)
Datum vložení: 9.11.2002 18:42:47
Kdo chce vulgární výraz napsat, si způsob, jak obejít jakýkoli filtr, vždycky najde. Stačí napsat slovo proložené tečkami nebo zaměnit jeden ze znaků třeba hvězdičkou. Dokonce si myslím, že čím rafinovanější filtr použijete, tím větší to bude výzva jej překonat.
Datum vložení: 9.11.2002 20:54:25
Uplne s vami suhlasim, nema to zmysel. Zbytocne filtrovanie budem tam davat, ked aj tak on to obide. Radsej vobec to nedam a ked bude treba urcity prispevok zmazem s databasy. :-)
Datum vložení: 9.11.2002 23:04:18
no ale toho cloveka co se to poprve pokusi napsat normalne to urcite nepotesi.
Datum vložení: 9.11.2002 23:06:09
jo ja sem jiny vlado nez ten na ktereho odpovidam :)
Datum vložení: 10.11.2002 13:09:57
Možná to nemá velký smysl, ale jako ukázka je to dobrý... Nemá smysl furt diskutovat, zda to smysl má nebo ne, kdo chce, použije to, kdo ne, nemusí se o to ani zajímat!:o)
Datum vložení: 29.8.2003 16:36:15
To je pravda
Datum vložení: 1.11.2003 12:15:48
A kdo to nepoužije tak to usí smazat! Nebo si musí najmout někoho kdo mu bude o stránky pečovat! :-)
Datum vložení: 11.11.2002 9:08:44
Proc je to v sekci HTML, kdyz je to cele v PHP ?
Datum vložení: 1.8.2003 22:32:28
nechce se mi k tomu psat popis, ale funguje to, ma to svoje mouchy, ale da se to prezit, pouzivam to ve svem chatu, jestli se nekomu chce, tak at to napise do clanku
function sproste($message) {
$fuck=false;
$nc=array();
$newtext="";
$zakazane="!@#$%^&*()_+|\\\"\'[]}{:;./?.,<>-1234567890 ";
$od=array();
$do=array();
for ($i=0; $i<strlen($message); $i++) {
$chr=SubStr($message,$i,1);
$t=true;
for ($x=0; $x<strlen($zakazane); $x++) {
if ($chr==substr($zakazane,$x,1)) { $t=false; }
}
if ($t) {
$nc[]=$i;
$newtext.=$message[$i];
}
}
$newtext=StrTr($newtext,"áäèïéìëíòóöøšúùüýžÁÄÈÏÉÌËÍÒÓÖØŠÚÙÜÝŽ","aacdeeeinoorstuuuyzAACDEEEINOORSTUUUYZ");
$data2=MySQL_query("select * from chat_sproste_slova order by slovo desc");
do { while($f2=MySQL_fetch_array($data2)) {
$find=strpos($newtext,$f2[slovo]);
if (!($find===false)) { $od[]=$find; $do[]=strlen($f2[slovo]); }
}}while(false);
$fuck=false;
if (!empty($od)) {
for ($i=0; $i<count($od); $i++) {
$nah="";
for ($x=0; $x<$do[$i]; $x++) {
$nah.="*";
}
$pred=Substr($newtext,0,$od[$i]);
$po=SubStr($newtext,($od[$i]+$do[$i]));
$newtext=$pred.$nah.$po;
}
$fuckout=$message;
$fuck=true;
for ($i=0; $i<strlen($newtext); $i++) {
$pred=Substr($message,0,$nc[$i]);
$po=Substr($message,($nc[$i]+1));
$in=Substr($newtext,$i,1);
$message=$pred.$in.$po;
}
}
return array($fuck,$message,$fuckout);
}
Datum vložení: 1.8.2003 22:35:09
PS: funguje i nasledujici:
SPROSTE SLOVO = *************
S--P-R0O1S....Te==Šlóvo = *--*-*0*1*....**==*****
Datum vložení: 26.1.2008 12:01:39
-$zakazane="!@#$%^&*()_+|\\\"…,<>-1234567890 "; -tohle zakázaní na ochranu zdrojového kodování stačí.Ctělo by k tomu udělat článek s vysvětlením.Odstraňování nevhodných (sprostých)slovních výrazů se bude špatně provádět bo žánr těchto výrazů se neustále rozšiřuje a mění.
Datum vložení: 15.8.2003 15:48:07
Před časem mi na stránky chodili skinheadi a kazili knihu návštěv. Tak jsem udělal něco podobného jako je tady, akorát s tím rozdílem, že jsem příspěvek s nevhodným výrazem úplně zakázal publikovat a navíc jsem dotyčnému odebral možnost přidávat příspěvky (ip+cookie). Jako na potvoru mi už půl roku nikdo nic nevhodného nenapsal, jediný, kdo dostal už několikrát "ip ban", jsem byl já :-)))
Datum vložení: 26.8.2003 20:03:49
Myslím, že tento systém je daleko praktičtější.
>> DE81L0VÉ << jsou všude :-))
Datum vložení: 26.8.2003 13:01:11
Ten uvedený příklad ve článku je opravdu na nic stačí místo hloupý napsat třeba h l o u p ý a je to tam..