Файл: sys/inc/censure.php
Строк: 60
<?php
function censure($s, $delta = 3, $continue = "xe2x80xa6")
{
static $pretext = array(
'[уyоo]_? (?=[еёeхx])',
'[вvbсc]_? (?=[хпбмгжxpmgj])',
'[вvbсc]_?[ъь]_? (?=[еёe])',
'ё_? (?=[бb])',
'[вvb]_?[ыi]_?',
'[зz3]_?[аa]_?',
'[нnh]_?[аaеeиi]_?',
'[вvb]_?[сc]_? (?=[хпбмгжxpmgj])',
'[оo]_?[тtбb]_? (?=[хпбмгжxpmgj])',
'[оo]_?[тtбb]_?[ъь]_? (?=[еёe])',
'[иiвvb]_?[зz3]_? (?=[хпбмгжxpmgj])',
'[иiвvb]_?[зz3]_?[ъь]_? (?=[еёe])',
'[иi]_?[сc]_? (?=[хпбмгжxpmgj])',
'[пpдdg]_?[оo]_? (?> [бb]_? (?=[хпбмгжxpmgj])
| [бb]_? [ъь]_? (?=[еёe])
| [зz3]_? [аa] _?
)?',
'[пp]_?[рr]_?[оoиi]_?',
'[зz3]_?[лl]_?[оo]_?',
'[нnh]_?[аa]_?[дdg]_? (?=[хпбмгжxpmgj])',
'[нnh]_?[аa]_?[дdg]_?[ъь]_? (?=[еёe])',
'[пp]_?[оo]_?[дdg]_? (?=[хпбмгжxpmgj])',
'[пp]_?[оo]_?[дdg]_?[ъь]_? (?=[еёe])',
'[рr]_?[аa]_?[зz3сc]_? (?=[хпбмгжxpmgj])',
'[рr]_?[аa]_?[зz3сc]_?[ъь]_? (?=[еёe])',
'[вvb]_?[оo]_?[зz3сc]_? (?=[хпбмгжxpmgj])',
'[вvb]_?[оo]_?[зz3сc]_?[ъь]_? (?=[еёe])',
#4
'[нnh]_?[еe]_?[дdg]_?[оo]_?',
'[пp]_?[еe]_?[рr]_?[еe]_?',
'[oо]_?[дdg]_?[нnh]_?[оo]_?',
'[кk]_?[oо]_?[нnh]_?[оo]_?',
'[мm]_?[уy]_?[дdg]_?[оoаa]_?',
'[oо]_?[сc]_?[тt]_?[оo]_?',
'[дdg]_?[уy]_?[рpr]_?[оoаa]_?',
'[хx]_?[уy]_?[дdg]_?[оoаa]_?',
#5
'[мm]_?[нnh]_?[оo]_?[гg]_?[оo]_?',
'[мm]_?[оo]_?[рpr]_?[дdg]_?[оoаa]_?',
'[мm]_?[оo]_?[зz3]_?[гg]_?[оoаa]_?',
'[дdg]_?[оo]_?[лl]_?[бb6]_?[оoаa]_?',
);
static $badwords = array(
'(?<=[_d]) {RE_PRETEXT}?
[hхx]_?[уyu]_?[йiеeёяюju] #хуй, хуя, хую, хуем, хуёвый
#исключения:
(?<! _hue(?=_) #HUE -- цветовая палитра
| _hue(?=so_) #hueso -- испанское слово
| _хуе(?=дин) #Хуедин -- город в Румынии
)',
'(?<=[_d]) {RE_PRETEXT}?
[пp]_?[иi]_?[зz3]_?[дd]_?[:vowel:]',
'(?<=[_d]) {RE_PRETEXT}?
[eеё]_? (?<!не[её]_) [бb6]_?(?: [уyиi]_ #ебу, еби
| [ыиiоoaаеeёуy]_?[:consonant:] #ебут, ебать, ебись, ебёт, поеботина, выебываться, ёбарь
| [лl][оoаaыиi] #ебло, ебла, ебливая, еблись, еблысь
| [нn]_?[уy] #ёбнул, ёбнутый
| [кk]_?[аa] #взъёбка
)',
'(?<=[_d]) {RE_PRETEXT}
(?<=[^_d][^_d]|[^_d]_[^_d]_) [eеё]_?[бb6] (?:_|_?[аa]_?[^_d])',
'(?<=[_d]) {RE_PRETEXT}?
[бb6]_?[лl]_?(?:я|ya)(?: _ #бля
| _?[тд] #блять, бляди
)',
'(?<=[_d]) [пp]_?[иieе]_?[дdg]_?[eеaаoо]_?[rpр]',
'(?<=[_d]) [мm]_?[уy]_?[дdg]_?[аa]',
'(?<=[_d]) [zж]_?h?_?[оo]_?[pп]_?[aаyуыiеeoо]',
'(?<=[_d]) [мm]_?[аa]_?[нnh]_?[дdg]_?[aаyуыiеeoо](?<! манда(?=[лн])|манде(?=ль ))',
'(?<=[_d]) [гg]_?[оo]_?[вvb]_?[нnh]_?[оoаaяеeyу]',
'(?<=[_d]) f_?u_?[cс]_?k',
' л_?[оo]_?[хx]',
'[^р]_?[scс]_?[yуu]_?[kк]_?[aаiи]',
'[^р]_?[scс]_?[yуu]_?[4ч]_?[кk]',
' {RE_PRETEXT}?[хxh]_?[еe]_?[рpr](_?[нnh]_?(я|ya)| )',
' [зz3]_?[аa]_?[лl]_?[уy]_?[пp]_?[аa]',
);
static $re_trans = array(
'_' => 'x20',
'[:vowel:]' => '[аеиоуыэюяёaeioyu]',
'[:consonant:]' => '[^аеиоуыэюяёaeioyux20d]',
);
$re_badwords = str_replace('{RE_PRETEXT}',
'(?>' . implode('|', $pretext) . ')',
'~' . implode('|', $badwords) . '~sxu');
$re_badwords = strtr($re_badwords, $re_trans);
if (! function_exists('strip_tags_smart')) include_once H.'sys/inc/strip_tags_smart.php';
$s = strip_tags_smart($s, null, true, array('comment', 'style', 'map', 'frameset', 'object', 'applet'));
if (! function_exists('utf8_html_entity_decode')) include_once H.'sys/inc/utf8_html_entity_decode.php';
$s = utf8_html_entity_decode($s, $is_htmlspecialchars = true);
if (! function_exists('utf8_convert_case')) include_once H.'sys/inc/utf8_convert_case.php';
$s = utf8_convert_case($s, CASE_LOWER);
static $trans = array(
"xc2xad" => '',
"xccx81" => '',
'/\' => 'л',
'/|' => 'л',
"xd0xb5xd0xb5" => "xd0xb5xd1x91",
);
$s = strtr($s, $trans);
preg_match_all('/(?> xd0[xb0-xbf]|xd1[x80-x8fx91] #[а-я]
| [a-zd]+
)+
/sx', $s, $m);
$s = ' ' . implode(' ', $m[0]) . ' ';
$s = preg_replace('/( [xd0xd1][x80-xbf] #оптимизированное [а-я]
| [a-zd]
) \1+
/sx', '$1', $s);
if (preg_match($re_badwords, $s, $m, PREG_OFFSET_CAPTURE))
{
list($word, $offset) = $m[0];
$s1 = substr($s, 0, $offset);
$s2 = substr($s, $offset + strlen($word));
$delta = intval($delta);
if ($delta < 1 || $delta > 10) $delta = 3;
preg_match('/ (?> x20 (?>[xd0xd1][x80-xbf]|[a-zd]+)+ ){1,' . $delta . '}
x20?
$/sx', $s1, $m1);
preg_match('/^ (?>[xd0xd1][x80-xbf]|[a-zd]+)* #окончание
x20?
(?> (?>[xd0xd1][x80-xbf]|[a-zd]+)+ x20 ){1,' . $delta . '}
/sx', $s2, $m2);
$fragment = (ltrim(@$m1[0]) !== ltrim($s1) ? $continue : '') .
trim(@$m1[0] . '[' . trim($word) . ']' . @$m2[0]) .
(rtrim(@$m2[0]) !== rtrim($s2) ? $continue : '');
return $fragment;
}
return false;
}
?>