
Gabor
Szerkesztő
|
Nem mondtam hogy nem lehetne. (padminandor) sőt pont ezért írtam hogy:
" Persze ha csak úgy értetted hogy ez is használható ha az ember bizonyos neveket akar letiltani akkor valóban lehet ez egy egyszerűbb megoldás. "
Ezzel azt akartam mondani, hogy ha én értettem félre valamit és nem te gondolod rosszul hogy az én kis függvényem ugyanaz mint az in_array akkor még jobb megoldás mint amit én küldtem.
A minta illesztő függvényeket azért nem akartam használni mert gondoltam bárki könnyebben megérti a kódot ha én írom le a függvényt. De azért remélem nem haragszol nem vitatkozni akartam veled
|

RimElek
VIP
|
Én a te válaszodtól függetlenül válaszoltam onlyteszt -nek. És mivel semmivel nem utalt arra, hogy nem pontos egyezést vizsgálna, így arra mutattam példát.
Például miért ne lehetne olyan felhasználó, hogy: PadmiNandor, ha a becsületes neve Padmi Nándor. És nem emlékeztet az adminra.
De akárhogy is nézzük, van függvény a megoldásra.
1
2
3
4
5
6
| $tiltottak = array('tiltott1', 'tiltott2', 'tiltott3');
$nev = "tiltott1Itiltott2";
if(preg_match('~'.implode('|', $tiltottak).'~i', $nev, $m) ) {
echo 'A(z) '.$m[0].' tiltott szó!';
} |
vagy
És akkor az összes előforduló hibás szót kiírja a névből.
onlyteszt, te pedig, ha kihagytad az "in_array" szócskát ( függvényt ), akkor pont, hogy teljesen másképp oldottad meg :)
|

onlyteszt
Kezdő
|
Köszöntem a segítséget
Hasonlóan csináltam, csak kihagytam azt az in_array szócskát:)
|

Gabor
Szerkesztő
|
Hát tény hogy van egy ilyen függvény csak nem "erre". Mármint ha ez alatt azt értetted, hogy az ervenyes_e függvény helyett, mert a két függvény nem ugyanúgy viselkedik. Az in_array akkor jelez egyezést ha az adott karakterlánc tiltott úgy ahogy van. Viszont én úgy gondoltam hogy ő bizonyos szavakat akar letiltani. Például:
Tiltott szó: admin
Megadott név: admin
=> mindkét függvény letiltja
Tiltott szó: admin
Megadott név: siteadmin vagy Super admin vagy Pityu [admin]
=> az in_array nem talál egyezést de az ervenyes_e függvény ekkor is letiltja a nevet
Persze ha csak úgy értetted hogy ez is használható ha az ember bizonyos neveket akar letiltani akkor valóban lehet ez egy egyszerűbb megoldás.
|

RimElek
VIP
|
Van már erre függvény: in_array
1
2
3
4
5
6
|
if (in_array($nev, array('tiltott1','tiltott2','tiltottx'))) {
echo "tiltott";
} else {
echo "OK";
} |
Persze itt még lehet bonyolítani, hogy kis és nagybetűk usernévnél megegyeznek általában. De ahhoz csak a beírt nevet kell kisbetűsre alakítani.
Vagy adatbázisban tárolod és megnézed, van-e olyan név már benne.
|

Gabor
Szerkesztő
|
Én neked valami egyszerűbbet javaslok mint amit Geeb mondott pl.:
1
2
3
4
5
6
7
8
9
| function ervenyes_e($nev) {
$tiltott = array("eznemjo", "ez sem");
foreach($tiltott as $szo) {
if(strpos($nev,$szo)!==FALSE) {
return $szo;
}
}
return TRUE;
} |
és ezt a fügvényt használhatod az ellenőrzésre így:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//megnézzük hogy érvényes-e a felhasználó név
$engedely = ervenyes_e($nev) //ha a név érvényes $engedely értéke TRUE ha nem akkor egy karakterlánc mégpedig az a szó amelyiket a $nev tartalmaz pedig tilos
// példa tiltott szavak kaka, pisi
// $nev = "gabor" => $engedely = TRUE
// $nev = "kiskakas" => $engedely = "kaka"
//ellenőrzés
if($engedely!==TRUE){
echo "Hiba a $engedely szó le van tiltva így ez a felhasználó név nem használható";
} else {
// érvényes felhasználónév mehetünk tovább
}
|
remélem nem zavartalak össze a sok kommenttel nagyon. Remélem segítettem
|

Geeb
Kezdő
|
cenzúraként nem találtál semmit?
Most találtam munjkahelyen vagyok:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
A szotar.txt tartalma:
<iframe>:&#
<script>:##
.
.
.
és így tovább...
Tehát esetünkben az <iframe> taget lecseréljük egy "&#"-re.
Ennek a megoldásnak nagy előnye - mármint, hogy egy fájlból olvassa be ezeket az
értékeket - az, hogy
nagyon könnyen, bárki által egyszerűen módosítható/testreszabható az, hogy ki
mit szűr. Így aztán ezt lehet
éppúgy tagek szűrésére használni mint egy üzenőfal cenzúrázására, vagy egy
kezdetleges titkosításra.
És akkor jöjjön a lényeg a script, amit igyekeztem a lehető legrövidebben
megírni.
<?php
$text=$_GET['text'];
//első rész
$fajl="szotar.txt";
$file=fopen($fajl, "r");
while(!feof($file))
{
$sor=fgets($file,1024);
$szotar[]=$sor;
}
//második rész
For ($x= 0; $x <= count($szotar)-1; $x=$x+1)
{
$text2=explode(":", $szotar[$x]);
$text3[]=$text2[0];
$text4[]=$text2[1];
}
//harmadik rész
$text5 = str_replace($text3, $text4, $text);
print $text5;
?>
Magyarázat:
A script egy form által, GET metódussal küldött text input tartalmát elhelyezi
egy $text nevű változóban.
Értelem szerűen ezt a változót szeretnénk megtisztítani a különböző kódoktól.
Első rész: Itt beolvasásra kerül a szotar.txt fájl tartalma. A fájl teljes
tartalmát
ezután soronként beleírjuk egy $szotar nevű tömbbe.
második rész: Szétszedjük a $szotar tömben található sorokat ":" mentén.
Itt kezd egy kicsit bonyolodni a dolog . Miután szétszedtük az adot sort
pl.: <iframe>:&#
ebből lesz egy <iframe> és egy &# .
Tehát esetünkben a $text2[0] értéke <iframe>, míg $text2[1] &# lesz.
Ezen értékeket külön-külön behelyezzük megint egy tömbe azért, hogy aztán
az összes kiolvasott sor [0] és [1] elemére hivatkozhassunk.
Harmadik rész: Itt történik meg a karakterlánc lecserélése, tehát itt lesz az
<iframe> -ből &#. Majd kiiratjuk az egészet a képernyőre.
Amennyiben nem teljesen világos, hogyan is működik a script nem kell kétségbe
esni.
Ebben az esetben ajánlom az explode(), str_replace() függvények alaposabb
megismerését
illetve a tömbökkel való műveletek elsajátítását.
Felhasználás:
//egy fórum űrlapja//---(method=GET)--->//cenzura.php//=>//kiiratás, vagy
továbbadás//
űrlap:
<form action=cenzura.php method=GET>
Üzenet: <input type=text name=text>
<input type=submit value=mehet>
</form>
Jelen esetben ezaz űrlap elküldi a text nevű input tartalmát a cenzura.php-nek,
ami elvégzi rajta a szűrést,
a szotar.txt fájlt beállításától függően, majd az kiírja a márt
megszűrt/cenzurált stringet a képernyőre.
pl.: szotar.txt tartalma
<:#
>:##
":&
':&&
_:,
%:.
/:-
\:--
Összefoglalás:
A cenzura.php modult tudom ajánlani azoknak, akik egy valamennyire
automatizált moderációs üzenőfalat/fórumot/vendégkönyvet akarnak csinálni.
Egy olyan szotar.txt fájl összeállítását javaslom mellé, amiben szűrésre kerülnek
az általunk veszélyesnek talált tagek, illetve metakarakterek, és mellette
esetlegesen a ronda szavak is. |
|

onlyteszt
Kezdő
|
Próbálgattam de nem igen akar sikerülni:)
Regisztrációba szeretnék egy tiltott neveket szűrő funkciót.
Valami hasonlóra gondolok hogy:
1
2
3
4
5
6
7
|
if($nev == $tiltott_nevek){echo"Tiltott név...";}
vagy
if(tiltott($nev)){echo"Tiltott név...";}
|
|
|