preg_match и русские буквы

Тема в разделе "Как сделать...", создана пользователем VLDM, 12 июл 2013.

  1. VLDM

    VLDM Постоялец

    Регистр.:
    15 июн 2006
    Сообщения:
    50
    Симпатии:
    6
    пытаюсь для доски объявлений DLE Board прикрутить функцию запрет на стоп слова.
    проблема в реакции preg_match на русские слова, т.е. когда preg_match находит совпадение с русскими словами он дополнительно добавляет какой то глюк и страница перезагружается не могу определить в чем причина, если использовать "en" буквы то все работает нормально без всяких глюков. В отдельном файле код работает с русскими буквами нормально.

    Код:
    setlocale(LC_ALL, 'ru_RU.CP1251');
     
    //Входящие данные из формы
    $title = "секс текст заголовка";
    $text = "порно текст сообщения";
    $fio = "интим текст имени";
     
    $intext = array($title, $text, $fio);
     
    //Список стоп слов
    $sw_array = array('секс', 'порно', 'интим', 'sex');
     
     
    foreach($sw_array as $value2) {
     
    foreach($intext as $value1) {
     
    if (preg_match ("/$value2/i", $value1)) {
     
    $StopSpam = true;
     
    }}}
     
    if ($StopSpam === true) {
    echo "обнаружены запрещенные слова";
    }
    
     
  2. etosh

    etosh Создатель

    Регистр.:
    22 июл 2013
    Сообщения:
    32
    Симпатии:
    4
    В кодировке UTF-8 и с модификатором /u пробовал (это поддержка Unicode)?
    Код:
    preg_match ("/$value2/iu", $value1)
     
  3. VLDM

    VLDM Постоялец

    Регистр.:
    15 июн 2006
    Сообщения:
    50
    Симпатии:
    6
    действительно проблема была в кодировке,
    интересно то что при неправильной кодировке preg_match находил соответствие но выдавал непонятную ошибку, а по идее не должен был находить, почитал про то как криво работает preg_match и стало ясно что это его глюк, теперь необходимо подобрать надежный способ определения кодировки, нашел несколько готовых решений.