CooperCMS > PHP и другие > Посчитать процент кириллицы в тексте на php

Посчитать процент кириллицы в тексте на php


12-01-2017, 02:50. Разместил: . Возьмём то, что будет нам помогать определять сколько кириллицы, латиницы и прочего во входящих данных
Способ громоздкий и не совершенный, я как исследователь довольствуюсь свободой фантазии и не углубляюсь в оптимизацию кода до определённой поры.
//setlocale(LC_ALL,"rus"); 
$string=$_REQUEST['txt']; 
echo 'Тестовая строка = '.$string; 
preg_match_all("/[а-яА-ЯёЁa-zA-Z]/u",$string, $matchesall); 
preg_match_all("/[а-яА-ЯёЁa-zA-Z0-9]/u",$string, $matchesallAndNum); 
preg_match_all("/[а-яА-ЯёЁ]/u",$string, $matches); 
preg_match_all("/[a-zA-Z]/",$string, $matches2); 
preg_match_all("/[0-9]/",$string, $matchesNum); 
$all=count($matchesall[0]);
$allRu=count($matches[0]);
$allEn=count($matches2[0]);
$allNum=count($matchesNum[0]);
$allLetterNum=count($matchesallAndNum[0]);
$countLetterRu = round(($allRu/$all)*100);
$countLetterEn = round(($allEn/$all)*100);
echo '<br> Количество букв и цифр = '.$allLetterNum; 
echo '<br> Количество букв = '.$all.' где на русском '.$countLetterRu.'%, букв на латинице '.$countLetterEn.'%'; 
echo '<br> Количество русских букв = '.$allRu; 
echo '<br> Количество английских букв = '.$allEn; 
echo '<br> Количество цифр = '.$allNum; 
if ($countLetterRu > $countLetterEn) {echo '<br>Кириллицы больше';} elseif ($countLetterRu == $countLetterEn) {echo '<br>Букв поровну'; } else {echo '<br>На латинице больше'; } 

Вернёмся к доске, найдём плагин антиспама тут - /oc-content/plugins/spamkiller/index.php

и добавим условие в функцию проверки  объявления function after_item_posted

 
preg_match_all("/[а-яА-ЯёЁa-zA-Z]/u",$item[s_title].$item[s_description], $matchesall);  
preg_match_all("/[а-яА-ЯёЁ]/u",$item[s_title].$item[s_description], $matches); 
preg_match_all("/[a-zA-Z]/",$item[s_title].$item[s_description], $matches2); 
$all=count($matchesall[0]);
$allRu=count($matches[0]);
$allEn=count($matches2[0]);  
$countLetterRu = round(($allRu/$all)*100);
$countLetterEn = round(($allEn/$all)*100);
if ($countLetterRu < 90) {    ModelSpamKiller::newInstance()->blockItem($item[pk_i_id]);} 
  

Теперь при публикации объявления будет проверяться количество кириллицы, если меньше 90% то объявление будет помечено как спам.
ура, работает
Вернуться назад