Jump to content
php.lv forumi

Lamvaardu chekoshana!


sfx

Recommended Posts

Nu lieta taada, kaaa lai no $text vai nu paarsuac visus lamvaardus vai vismaz kautkaa liidziigi!

 

Nu vismaz pasakiet ar kaadu funkciju var chekot $text

 

thx!

Link to comment
Share on other sites

Tātad, varētu būt apmēram šādi.

 

1) Tev ir teksta fails, piemēram lamuvardi.txt

Viņa sastāvs ir šāds.

fuck
bitch
daunis
pimpis

Katrā rindā savs lamuvārds.

 

Taisam f-ju.

 

function strip_bad_words($teksts,$fails) {
$o = file($fails);
for ($i=0;$i<=count($o);$i++) {
$badword = trim($o[$i]);
$teksts = str_replace($badword,str_repeat("*",strlen($badword)),$teksts);
}
return $teksts;
}

 

 

Tad pielietojam :-)

 

$teksts = 'fuck you bitch, daunis, gejs, lalala';
$fails = 'lamuvardi.txt';
$teksts = strip_bad_words($teksts,$fails);

echo $teksts;

 

Ceru, ka tas ir tas ko vajadzēja :-)

Link to comment
Share on other sites

mazliet paatrināts uz cikla rēķina, palēnināts pirmā un pēdejā slikā vārda burta izvadam (ķipa f**k, lai tiem, kam vajag, tomēr saprot).

 

function strip_bad($teksts,$fails) {

$o=file($fails);

array_unshift($o,'empty');

$i=sizeof($o);

while(--$i)

{

$badword = trim($o[$i]);

$teksts=str_replace($badword,$badword[0].str_repeat('*',strlen($badword)-2).$badword[strlen($badword)-1],$teksts);

}

return $teksts;

}

 

Problēma: neapstrādā vārdus ar MaINīGU reĢisTRu. Ja php5, tad str_ireplace. Citādi kā vienmēr palīdz regulārie izteikumi:

$teksts=preg_replace('/('.$badword.')/i',str_repeat('*',strlen('\\1')),$teksts); turpat ciklā

Link to comment
Share on other sites

oooo thx, itkaa iet bet ir viens gljuks:

 

Notice: Undefined offset: 3 in coment_add.inc on line 8

nu es tak saku **** un **** un veel *****

 

8 line = $badword = trim($o[$i]);

 

kas tur nav taa kaa vajag?

 

Bet taa viss text aizgaaja!

 

Varbuut veel vari paliidzeet!!!

Kaa lai nolasa no $text kaadu $vaardu kursh lielaaks pa 100 simboliem?

piemeeram izmest taadus vardus kaa:

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Link to comment
Share on other sites

Kaa lai nolasa no $text kaadu $vaardu kursh lielaaks pa 100 simboliem?

piemeeram izmest taadus vardus kaa:

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

 

Iespējams, ka Tev ir vajadzīgs wordwrap(), bet ja nu tiešām vajag IZMEST tos vārdus, tad piemēram vareētu kaut kā šādi.

 

<?php
$teksts = "te ir tas teksts ar visiem garajiem un iisajiem vaardiem";
$garums = 100;
$wordArr = explode(" ",$teksts);

foreach ($wordArr as $word) 
if(strlen($word) <= $garums) $newArr[] = $word;

$teksts = implode(" ",$newArr);

echo $teksts;

?>

 

Nezinu vai strādā, neesu testējis, bet ideja ir ~ tāda. Gan jau, ka kādam ienāks prātā kaut kas labāks :-) Iespējams, ka to var izdarīt ar regulārajām izteiksmēm, bet neesu pārliecināts.

Link to comment
Share on other sites

Ideja: aizvietot simbolu secību, kas netiek pārrauta ar atstarpi, ja tā ir garāka par 20 simboliem un aizvietot to ar 12simb.'...'.5simb:

 

preg_replace(/([^\ ]*){20,}/,substr('\\1',0,12).'...'.substr('\\1',-5),$text);

 

sakarā ar: <cut>

8 line = $badword = trim($o[$i]);

kas tur nav taa kaa vajag?</cut>

 

tu laikam izmanto šo te <cut>

for ($i=0;$i<=count($o);$i++) </cut> variantu,

tad zini jēl, ka tur jābūt

for ($i=0;$i<=sizeof($o)-1;$i++)

vai pat labāk

 

$tmp=sizeof($o)-1;

for ($i=0;$i<=$tmp;++$i)

 

bet, tā kā secībā kādā vārdi tiek nomainīti (no pirmā līdz pēdējam, vai no pēdējā līdz pirmam) nav svarīga, iesaku tomēr masīva indeksu mazināt, pie tam tieši ar pre-dekrementēšanu kāpēc:

a) kad skaitītājs tiek palielināts (++$i,$i++), tiek pārbaudīts, vai tā tips nav jāpaplašina (piem no byte (līdz 255) uz int (255 ...65355; ja neņem vērā "-" vērtības)) - papildus operācija; ja tas tiek pazemināts (--$i,$i--), tad tipa maiņa notiek tikai šķērsojot 0.

B) $i++ nozīmē - atgriezt $i vērtību lai to varētu palielināt to par 1, izdarīt to, atgriezt izteiksmē

++$i nozīmē palielināt $i vērtību par 1 (lai nu kāda tā būtu), atgriezt vērtību

 

izmantojot a+b uz katra cikla tiek ietaupītas 2 zemākā līmeņa operācijas.

 

of Mr.Venom's Best Practices

Link to comment
Share on other sites

Vai nevar visus tos lamuvārdus sakrāmēt kaut kādā AWL binārajā kokā, lai ātrāk meklēšana notiek?

Man ir shausmiigas aizdomas, ka to lamu vaardu nebuus tik daudz, lai izmantot AVL buutu efektiivi.

Edited by des
Link to comment
Share on other sites

Tā kā PHP masīvu realizācija ar stringiem atslēgu vietā tiek implementēta ar hešinga palīdzību, tad var tos visus lamuvārdus iekrāmēt masīvā apmēram tā: $laumvards['fuck']=0; un tad, kad vajag pārbaudīt vai konkrēt vārds ir cenzējams vai nē, atliek if (array_key_exists($vards, $lamuvards)) {....}. Un man ir tādas aizdomas, ka šis variants var izrādīties ātrāks nekā AVL koki. ;)

Link to comment
Share on other sites

Man kā datoriķus beigušam rodas loģisks jautājums:

Vai nevar visus tos lamuvārdus sakrāmēt kaut kādā AWL binārajā kokā, lai ātrāk meklēšana notiek?

 

Man kā datoriķus nebeigušam (i pat nesākušam) cilvēkam rodas jautājums, kas ir AWL binārajs koks ?

Link to comment
Share on other sites

×
×
  • Create New...