Autor | Zpráva | ||
---|---|---|---|
jozko007 Profil |
Ahojte,
už asi dva dni hladam poriadný filter nadavok chcem aby plnil tieto funkcie: napr slovo chuj aby slovo oddychujem bolo cele a ked niekdo napiše chuuuuuuuuuj alebo CHUJ tak aby sa tiež zablokovalo a tiež by bodlo sklonovanie chuja volakedy som našiel zdrojak aj z prikladom ale nefungovalo mi to: niečo podobne hlada aj tento uzivatel: Podobný filter Za každu pomoc vopred Dakujem! |
||
Destiny_1 Profil |
#2 · Zasláno: 15. 9. 2014, 10:13:14 · Upravil/a: Destiny_1
Tohle jsem ti v rychlosti sesmolil... vyzkoušej a napiš jestli ti to vyhovuje.
<?php function detect($title) { static $convertTable = array ( 'á' => 'a', 'Á' => 'A', 'ä' => 'a', 'Ä' => 'A', 'č' => 'c', 'Č' => 'C', 'ď' => 'd', 'Ď' => 'D', 'é' => 'e', 'É' => 'E', 'ě' => 'e', 'Ě' => 'E', 'ë' => 'e', 'Ë' => 'E', 'í' => 'i', 'Í' => 'I', 'ï' => 'i', 'Ï' => 'I', 'ľ' => 'l', 'Ľ' => 'L', 'ĺ' => 'l', 'Ĺ' => 'L', 'ň' => 'n', 'Ň' => 'N', 'ń' => 'n', 'Ń' => 'N', 'ó' => 'o', 'Ó' => 'O', 'ö' => 'o', 'Ö' => 'O', 'ř' => 'r', 'Ř' => 'R', 'ŕ' => 'r', 'Ŕ' => 'R', 'š' => 's', 'Š' => 'S', 'ś' => 's', 'Ś' => 'S', 'ť' => 't', 'Ť' => 'T', 'ú' => 'u', 'Ú' => 'U', 'ů' => 'u', 'Ů' => 'U', 'ü' => 'u', 'Ü' => 'U', 'ý' => 'y', 'Ý' => 'Y', 'ÿ' => 'y', 'Ÿ' => 'Y', 'ž' => 'z', 'Ž' => 'Z', 'ź' => 'z', 'Ź' => 'Z', ); $title = strtolower(strtr($title, $convertTable)); $title = preg_replace('/[^a-zA-Z0-9]+/u', '', $title); $title= str_split($title); $a=''; $b=''; foreach ($title as $value) { if ($b!=$value) { $a.=$value; } $b=$value; } return $a; } $pole=array(); $pole['sracove']=""; $pole['srac']=""; $sprosteslovo=detect("sráááááčovéééé"); if (isset($pole[$sprosteslovo])) { echo "bylo detekováno sprosté slovo"; } else { echo "tohle slovo je v pořádku"; } a na celé věty by se dalo použít třeba tohle <?php function detect($title,$sprosta_slova) { $var=''; $text=preg_split("/[\s]+/",$title); foreach ($text as $array) { static $convertTable = array ( 'á' => 'a', 'Á' => 'A', 'ä' => 'a', 'Ä' => 'A', 'č' => 'c', 'Č' => 'C', 'ď' => 'd', 'Ď' => 'D', 'é' => 'e', 'É' => 'E', 'ě' => 'e', 'Ě' => 'E', 'ë' => 'e', 'Ë' => 'E', 'í' => 'i', 'Í' => 'I', 'ï' => 'i', 'Ï' => 'I', 'ľ' => 'l', 'Ľ' => 'L', 'ĺ' => 'l', 'Ĺ' => 'L', 'ň' => 'n', 'Ň' => 'N', 'ń' => 'n', 'Ń' => 'N', 'ó' => 'o', 'Ó' => 'O', 'ö' => 'o', 'Ö' => 'O', 'ř' => 'r', 'Ř' => 'R', 'ŕ' => 'r', 'Ŕ' => 'R', 'š' => 's', 'Š' => 'S', 'ś' => 's', 'Ś' => 'S', 'ť' => 't', 'Ť' => 'T', 'ú' => 'u', 'Ú' => 'U', 'ů' => 'u', 'Ů' => 'U', 'ü' => 'u', 'Ü' => 'U', 'ý' => 'y', 'Ý' => 'Y', 'ÿ' => 'y', 'Ÿ' => 'Y', 'ž' => 'z', 'Ž' => 'Z', 'ź' => 'z', 'Ź' => 'Z', ); $title = strtolower(strtr($array, $convertTable)); $title = preg_replace('/[^a-zA-Z0-9]+/u', ' ', $title); $title= str_split($title); $a=''; $b=''; foreach ($title as $value) { if ($b!=$value) { $a.=$value; } $b=$value; } if (preg_match("/(".implode("|",$sprosta_slova).")/", $a)){ $var.="**** "; } else { $var.=$array." "; } } return trim($var); } $sprostaslova=array("pondeli","utery","streda","ctvrtek","patek","sobota"); $text="Oskaři,v pondělí jsem objednával SIM kartu,ale přišla až v úterýýý..Kde je chyba?"; echo detect($text,$sprostaslova); |
||
jozko007 Profil |
#3 · Zasláno: 15. 9. 2014, 11:34:41
Vypisuje mi chybu v php
Warning: implode(): Invalid arguments passed in bolo by dobre keby to koncilo return $nadavka; } |
||
juriad Profil |
#4 · Zasláno: 15. 9. 2014, 11:44:11
jozko007:
A proč si prostě nenapíšeš hromadu regexů, kterou provedeš na transliterovaný text? /\bc+h+u+j+(a+|o+v+e+|e+m+)?\b/i /\bh+o+v+a+d+(o+|a+|y+|u+|e+m+)\b/i Hranice slova je \b. Část v závorce jsou svislítkem oddělené alternativní nepovinné přípony - nepovinné = otazník. Lomítka na začátku a na konci jsou jen ohraničení a znak i na konci značí ignorování velikosti písmen. |
||
Destiny_1 Profil |
#5 · Zasláno: 15. 9. 2014, 11:45:33
Znovu jsem tu funkci upravil, ta předchozí vynechávala některá slova.
No a když si nakopíruješ do scriptu přesně tohle: <?php function filter($title,$sprosta_slova) { static $convertTable = array ( 'á' => 'a', 'Á' => 'A', 'ä' => 'a', 'Ä' => 'A', 'č' => 'c', 'Č' => 'C', 'ď' => 'd', 'Ď' => 'D', 'é' => 'e', 'É' => 'E', 'ě' => 'e', 'Ě' => 'E', 'ë' => 'e', 'Ë' => 'E', 'í' => 'i', 'Í' => 'I', 'ï' => 'i', 'Ï' => 'I', 'ľ' => 'l', 'Ľ' => 'L', 'ĺ' => 'l', 'Ĺ' => 'L', 'ň' => 'n', 'Ň' => 'N', 'ń' => 'n', 'Ń' => 'N', 'ó' => 'o', 'Ó' => 'O', 'ö' => 'o', 'Ö' => 'O', 'ř' => 'r', 'Ř' => 'R', 'ŕ' => 'r', 'Ŕ' => 'R', 'š' => 's', 'Š' => 'S', 'ś' => 's', 'Ś' => 'S', 'ť' => 't', 'Ť' => 'T', 'ú' => 'u', 'Ú' => 'U', 'ů' => 'u', 'Ů' => 'U', 'ü' => 'u', 'Ü' => 'U', 'ý' => 'y', 'Ý' => 'Y', 'ÿ' => 'y', 'Ÿ' => 'Y', 'ž' => 'z', 'Ž' => 'Z', 'ź' => 'z', 'Ź' => 'Z', ); $var=''; $text=preg_split("/([^".implode("",array_keys($convertTable))."a-zA-Z0-9]+)/",$title , -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); foreach ($text as $array) { $title = strtolower(strtr($array, $convertTable)); $title = preg_replace('/[^a-zA-Z0-9]+/u', ' ', $title); $title= str_split($title); $a=''; $b=''; foreach ($title as $value) { if ($b!=$value) { $a.=$value; } $b=$value; } if (preg_match("/(".implode("|",$sprosta_slova).")/", $a)){ $var.="****"; } else { $var.=$array; } } return trim($var); } $sprostaslova=array("pondeli","utery","streda","ctvrtek","patek","sobota"); $text="Oskaři,v pondělí jsem objednával SIM kartu,ale přišla až v úterýýý..Kde je chyba?"; echo filter($text,$sprostaslova); Tak by ti to mělo vrátit "Oskaři,v **** jsem objednával SIM kartu,ale přišla až v ****..Kde je chyba?" Chybu by to házet nemělo. No a jak si to přesně představuješ? že ti ta funkce vrátí sprostá slova? Nebylo by lepší, kdyby to ty sprostá slova rovnou smazala a nahradila je třeba za hvězdičky, tak jak je to teď? |
||
juriad Profil |
#6 · Zasláno: 15. 9. 2014, 11:52:38
Destiny_1:
Ale smazáním či vyhvězdičkováním mohou vzniknout nová sprostá slova. Toho jde pěkně zneužít. :-) cchujhchujuchujj -> c****h****u****j |
||
Bubák Profil |
Destiny_1:
Pokud mezi sprostými slovy bude lidové označení pro fekálie, tak neprojde ani knihovna. Kód začínáš <?php , ale chybí ?> , to může lidem při kopírování bez přemýšlení dělat problémy.
|
||
Destiny_1 Profil |
juriad:
cchujhchujuchujj mi vrátil **** což mi připomíná že to nesplňuje jozkovi požadavky aby slovo oddychujem bolo cele Proto by se měl 30. řádek změnit na: if (preg_match("/^(".implode("|",$sprosta_slova).")$/", $a)){ Bubák: Kód začínáš <?php, ale chybí ?>, to může lidem při kopírování bez přemýšlení dělat problémy. Díky za upozornění, dám si příště pozor. |
||
jozko007 Profil |
stale mi to vypisuje chybu implode
kod som upravil lebo echo nemozem dať dal som return function filter($title,$sprosta_slova) { static $convertTable = array ( 'á' => 'a', 'Á' => 'A', 'ä' => 'a', 'Ä' => 'A', 'č' => 'c', 'Č' => 'C', 'ď' => 'd', 'Ď' => 'D', 'é' => 'e', 'É' => 'E', 'ě' => 'e', 'Ě' => 'E', 'ë' => 'e', 'Ë' => 'E', 'í' => 'i', 'Í' => 'I', 'ï' => 'i', 'Ï' => 'I', 'ľ' => 'l', 'Ľ' => 'L', 'ĺ' => 'l', 'Ĺ' => 'L', 'ň' => 'n', 'Ň' => 'N', 'ń' => 'n', 'Ń' => 'N', 'ó' => 'o', 'Ó' => 'O', 'ö' => 'o', 'Ö' => 'O', 'ř' => 'r', 'Ř' => 'R', 'ŕ' => 'r', 'Ŕ' => 'R', 'š' => 's', 'Š' => 'S', 'ś' => 's', 'Ś' => 'S', 'ť' => 't', 'Ť' => 'T', 'ú' => 'u', 'Ú' => 'U', 'ů' => 'u', 'Ů' => 'U', 'ü' => 'u', 'Ü' => 'U', 'ý' => 'y', 'Ý' => 'Y', 'ÿ' => 'y', 'Ÿ' => 'Y', 'ž' => 'z', 'Ž' => 'Z', 'ź' => 'z', 'Ź' => 'Z', ); $var=''; $text=preg_split("/([^".implode("",array_keys($convertTable))."a-zA-Z0-9]+)/",$title , -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); foreach ($text as $array) { $title = strtolower(strtr($array, $convertTable)); $title = preg_replace('/[^a-zA-Z0-9]+/u', ' ', $title); $title= str_split($title); $a=''; $b=''; foreach ($title as $value) { if ($b!=$value) { $a.=$value; } $b=$value; } if (preg_match("/^(".implode("|",$sprosta_slova).")$/", $a)){ $var.="****"; } else { $var.=$array; } } return trim($var); $sprostaslova=array("pondeli","utery","streda","ctvrtek","patek","sobota"); return filter($title,$sprostaslova); } tento skript mi funguje a už ciastočne plni moju funkciu function filter($text){ $filterWords = array('c+h+u+j+(a+|o+v+e+|e+m+)','smrd','pici','chuj','pici'); $filterCount = sizeof($filterWords); for($i=0; $i<$filterCount; $i++){ $text = preg_replace('/\b'.$filterWords[$i].'?\b/i',"*",$text); } return $text; } |
||
Destiny_1 Profil |
#10 · Zasláno: 15. 9. 2014, 13:27:40
jozko007:
to echo tam bylo jen pro test, aby sis to vyzkoušel: A tohle co jsi předělal: $sprostaslova=array("pondeli","utery","streda","ctvrtek","patek","sobota"); return filter($title,$sprostaslova); |
||
jozko007 Profil |
#11 · Zasláno: 15. 9. 2014, 13:34:18
soory mozem vydiet cely zdrojak?
lepšie sa mi to chape |
||
Destiny_1 Profil |
#12 · Zasláno: 15. 9. 2014, 13:42:18
vytvoř si nový php soubor a vlož si tam pouze tohle:
<?php header('Content-type: text/html;charset=UTF-8'); function filter($title,$sprosta_slova) { static $convertTable = array ( 'á' => 'a', 'Á' => 'A', 'ä' => 'a', 'Ä' => 'A', 'č' => 'c', 'Č' => 'C', 'ď' => 'd', 'Ď' => 'D', 'é' => 'e', 'É' => 'E', 'ě' => 'e', 'Ě' => 'E', 'ë' => 'e', 'Ë' => 'E', 'í' => 'i', 'Í' => 'I', 'ï' => 'i', 'Ï' => 'I', 'ľ' => 'l', 'Ľ' => 'L', 'ĺ' => 'l', 'Ĺ' => 'L', 'ň' => 'n', 'Ň' => 'N', 'ń' => 'n', 'Ń' => 'N', 'ó' => 'o', 'Ó' => 'O', 'ö' => 'o', 'Ö' => 'O', 'ř' => 'r', 'Ř' => 'R', 'ŕ' => 'r', 'Ŕ' => 'R', 'š' => 's', 'Š' => 'S', 'ś' => 's', 'Ś' => 'S', 'ť' => 't', 'Ť' => 'T', 'ú' => 'u', 'Ú' => 'U', 'ů' => 'u', 'Ů' => 'U', 'ü' => 'u', 'Ü' => 'U', 'ý' => 'y', 'Ý' => 'Y', 'ÿ' => 'y', 'Ÿ' => 'Y', 'ž' => 'z', 'Ž' => 'Z', 'ź' => 'z', 'Ź' => 'Z', ); $var=''; $text=preg_split("/([^".implode("",array_keys($convertTable))."a-zA-Z0-9]+)/",$title , -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); foreach ($text as $array) { $title = strtolower(strtr($array, $convertTable)); $title = preg_replace('/[^a-zA-Z0-9]+/u', ' ', $title); $title= str_split($title); $a=''; $b=''; foreach ($title as $value) { if ($b!=$value) { $a.=$value; } $b=$value; } if (preg_match("/^(".implode("|",$sprosta_slova).")$/", $a)){ $var.="****"; } else { $var.=$array; } } return trim($var); } //tady místo dnů, napíšeš do array sprostá slova $sprostaslova=array("pondeli","utery","streda","ctvrtek","patek","sobota"); $text="Oskaři,v pondělí jsem objednával SIM kartu,ale přišla až v úterýýý..Kde je chyba?"; echo filter($text,$sprostaslova); ?> |
||
jozko007 Profil |
#13 · Zasláno: 15. 9. 2014, 14:17:31
v samostatnom subore to funguje! SUPER! aj z prikladom ale ked to chcem dat do mojho suboru
tam tak piše tu chybu :( |
||
Destiny_1 Profil |
#14 · Zasláno: 15. 9. 2014, 14:26:13
tak pošli soubor a já ti řeknu, kde děláš chybu
|
||
jozko007 Profil |
#15 · Zasláno: 15. 9. 2014, 14:31:26
ok poslem ti ho cez e-mail cez icq cez skype?
e-mail Prihlas(zavináč)gmail.com |
||
lionel messi Profil |
jozko007:
„ok poslem ti ho cez e-mail cez icq cez skype?“ Sme na verejnom fóre, takže Pravidla diskuse JPW a doporučení » 7. Nechtějte, aby vám lidi posílali odpověď mailem. Je-li veřejně dostupný dotaz, má být veřejně dostupná i odpověď. Bolo by lepšie poslať súbor sem. |
||
Destiny_1 Profil |
#17 · Zasláno: 15. 9. 2014, 14:42:49
jozko007:
Jo, lepší to bude poslat sem, nebo třeba sem http://pastebin.com/ |
||
jozko007 Profil |
#18 · Zasláno: 15. 9. 2014, 15:01:22
aha dakujem za pomoc!
Pastebin |
||
Destiny_1 Profil |
Ty jsi nepochopil, že to array musíš zadávat tam, kde voláš tu funkci, ale to nevadí, upravil jsem to tak, aby jsi to volal jenom s jedním argumentem.
Ale v tom případě sprostá slova budeš muset přidávat uvnitř funkce |
||
jozko007 Profil |
#20 · Zasláno: 15. 9. 2014, 15:41:54
NO SUPER!
uz mi to funguje! Ked mozem poprosit odstran ten link. Pre vsetkych davam llink sem: function filter($title) { static $sprosta_slova=array("pondeli","utery","streda","ctvrtek","patek","sobota"); static $convertTable = array ( 'á' => 'a', 'Á' => 'A', 'ä' => 'a', 'Ä' => 'A', 'č' => 'c', 'Č' => 'C', 'ď' => 'd', 'Ď' => 'D', 'é' => 'e', 'É' => 'E', 'ě' => 'e', 'Ě' => 'E', 'ë' => 'e', 'Ë' => 'E', 'í' => 'i', 'Í' => 'I', 'ï' => 'i', 'Ï' => 'I', 'ľ' => 'l', 'Ľ' => 'L', 'ĺ' => 'l', 'Ĺ' => 'L', 'ň' => 'n', 'Ň' => 'N', 'ń' => 'n', 'Ń' => 'N', 'ó' => 'o', 'Ó' => 'O', 'ö' => 'o', 'Ö' => 'O', 'ř' => 'r', 'Ř' => 'R', 'ŕ' => 'r', 'Ŕ' => 'R', 'š' => 's', 'Š' => 'S', 'ś' => 's', 'Ś' => 'S', 'ť' => 't', 'Ť' => 'T', 'ú' => 'u', 'Ú' => 'U', 'ů' => 'u', 'Ů' => 'U', 'ü' => 'u', 'Ü' => 'U', 'ý' => 'y', 'Ý' => 'Y', 'ÿ' => 'y', 'Ÿ' => 'Y', 'ž' => 'z', 'Ž' => 'Z', 'ź' => 'z', 'Ź' => 'Z', ); $var=''; $text=preg_split("/([^".implode("",array_keys($convertTable))."a-zA-Z0-9]+)/",$title , -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); foreach ($text as $array) { $title = strtolower(strtr($array, $convertTable)); $title = preg_replace('/[^a-zA-Z0-9]+/u', ' ', $title); $title= str_split($title); $a=''; $b=''; foreach ($title as $value) { if ($b!=$value) { $a.=$value; } $b=$value; } if (preg_match("/^(".implode("|",$sprosta_slova).")$/", $a)){ $var.="****"; } else { $var.=$array; } } return trim($var); } |
||
jozko007 Profil |
#21 · Zasláno: 15. 9. 2014, 17:38:28
Ok este par otázok
aby sa nezobrazovalo ked zadam napr *c*h*u*j* miesto * moze byt aj ?!:@-+ Dasa to cez tu static $convertTable '*a*' => 'a', Da sa to jednoduchšie? |
||
Destiny_1 Profil |
#22 · Zasláno: 15. 9. 2014, 17:50:30
můžeš tam přidat tohle:
'*' => '', |
||
Bubák Profil |
#23 · Zasláno: 15. 9. 2014, 18:03:08
'*' => '', '?' => '', '!' => '', ':' => '', '@' => '', '+' => '', '-' => '', '|' => '', '/' => '', '\' => '', ' ' => '', сhuj anebo chuj a budeš se divit, jak je možné, že ti to prošlo přes filtr.
|
||
Časová prodleva: 10 let
|
0