Php фильтр (стоп слов)

S
На сайте с 13.11.2012
Offline
72
2408

Пожалуйста, подскажите, из-за чего приведенный ниже код работает только с иностранными словами - блокирует слова, русские все пропускает.

Как исправить?

Спасибо!

<?php
class profanityFilter {
var $wordList;

function __construct() {
$this->_setWordList();
}

function scanText($txt) {
$profanityCount = 0;
$txt = strip_tags($txt);
$txt = html_entity_decode($txt,ENT_QUOTES);
$txt=strtolower($txt);
foreach ($this->wordList as $k=>$v) {
preg_match_all("#\b".$k."(?:es|s)?\b#si",$txt, $matches, PREG_SET_ORDER);
$profanityCount += count($matches)*$v;
}
return $profanityCount;
}

function _setWordList() {
$words = array(
"anus"=>1,
);
$wordsPrepped = array();
foreach ($words as $k=>$v) {
$k = str_replace('-','\\W*',$k);
$wordsPrepped[$k] = $v;
}
$this->wordList = $wordsPrepped;
}
}
?>


---------- Добавлено 21.02.2017 в 04:09 ----------

Параллельно хотел спросить, вывожу описание новости так

<?php echo $yt->snippet->description ?>

можно из полученного описания на лету вырезать все ссылки (url текст ссылки, т.е. в коде ссылки нет) начинающиеся с http, https или заменить их чем-то.

Спасибо!

TF-Studio
На сайте с 17.08.2010
Offline
334
#1

utf8

дело вероятнее всего в кодировке

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
Ragnarok
На сайте с 25.06.2010
Offline
226
#2
//TODO: перестать откладывать на потом
L
На сайте с 10.02.2015
Offline
222
#3

1. Может Вы скармливате фильтру иностранные слова? :)

2. Для юникода есть модификатор u у регулярок:

preg_match_all("#\b".$k."(?:es|s)?\b#usi",$txt, $matches, PREG_SET_ORDER);
S
На сайте с 30.09.2016
Offline
469
#4
livetv:
Может Вы скармливате фильтру иностранные слова? :)

Этот фильтр в принципе заточен под иностранные, точнее, английские/французские слова

(?:es|s)?
Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
S
На сайте с 13.11.2012
Offline
72
#5

Спасибо! Разобрался

S
На сайте с 13.11.2012
Offline
72
#6

Сменил vps, перестала работать обработка русских стоп слов

preg_match_all("#\b".$k."(?:es|s|ru)?\b#usi",$txt, $matches, PREG_SET_ORDER);

из-за чего это может быть?

Версия php 5.3.3, пробовал увеличивать до 5.6 не работает.

Из-за чего на одном сервере функция работает а на другом нет?

Спасибо!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий