За последние 24 часа нас посетили 87292 программиста и 4639 роботов. Сейчас ищут 2040 программистов ...

Как преобразовать текст в нижний регистр?

Тема в разделе "PHP для новичков", создана пользователем greu, 14 июл 2018.

  1. greu

    greu Новичок

    С нами с:
    14 июл 2018
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте, подскажите как преобразовать текст в нижний регистр?
    Ниже представлен код плагина антимата на игровой сервер, строка 71.
    //Слова преобразуем в нижний регистр
    $message = $mod->strtolower($message);
    не пойму, но это не работает.

    PHP:
    1. <?php
    2.  
    3. /*
    4. PLUGIN: Badwords
    5. ================
    6. Kicks player when they use bad words defined in config/plugins/badwords.lst more
    7. that X-Times
    8.  
    9. Добавления от jTommy:
    10. 1. В причине бана/кика указывается плохое слово (удобно при просмотре логов, особенно при использовании плагина logkickbans) .
    11. 2. Теперь плагин не ищет плохие слова внутри слов. Например, выражение "4 рубля"  теперь не будет считаться плохим.
    12.  
    13. CONFIG:
    14. -------
    15. [badwords]
    16. enabled = 1                       ;Enable plugin
    17. warnstokick = 3                   ;Uses of badwords until kick
    18. mode = "kick"                     ;kick/ban/tempban
    19. kickreason = "Use of bad words (<WORD>)"   ;Reason of a kick
    20.  
    21. NAMESPACE: badwords
    22.  
    23. Functions:
    24.      badwords_main
    25.      badwords_read
    26.      badwords_playerInit
    27.  
    28. Vars:
    29.     $badwords_list
    30. */
    31.  
    32. $mod->setDefaultCV("badwords", "enabled",     0);
    33. $mod->setDefaultCV("badwords", "warnstokick", 3);
    34. $mod->setDefaultCV("badwords", "mode",        "tempban");
    35. $mod->setDefaultCV("badwords", "kickreason",  "Use of bad words (<WORD>)");
    36.  
    37. $mod->registerEvent("playerSay", "badwords_main");
    38. $mod->registerEvent("playerJoined", "badwords_playerInit");
    39. $mod->registerEvent("parseConfig", "badwords_read");
    40. badwords_read();
    41.  
    42. //Init Players because playerJoined isn't called at startup
    43. array_map("badwords_playerInit", array_keys($players));
    44.  
    45. function badwords_main($args) {
    46.     list($guid, $message, $executed) = $args;
    47.  
    48.     global $players;
    49.     global $mod;
    50.     global $badwords_list;
    51.  
    52.     $delimiters = array('!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~');
    53.  
    54.     if (!$mod->getCV("badwords", "enabled")) return;
    55.  
    56.     if ($executed) return;
    57.  
    58.     if (!$badwords_list) return;
    59.  
    60.     if ($players[$guid]->isProtected()) {
    61.         return;
    62.     }
    63.  
    64.     // Убираем информацию о цвете текста
    65.     $message = $mod->removecolor($message);
    66.     // Убираем из строки все знаки препинания
    67.     foreach($delimiters as $symb) {
    68.       $message = str_replace($symb, '', $message);
    69.     }
    70.     //Слова преобразуем в нижний регистр
    71.     $message = $mod->strtolower($message);
    72.     // В целях отладки: Показываем игроку его же сообщение (уже после обработки)
    73.      $players[$guid]->say($message);
    74.     // Разбиваем строку на слова
    75.     $mess_exp = explode(' ', $message);
    76.  
    77.     $bad = false;
    78.     foreach($mess_exp as $word) {
    79.       foreach($badwords_list["normal"] as $value) {
    80.         if (!strcasecmp($word, $value)) {
    81.       $bad = true;
    82.       $badword = $value;
    83.       break;
    84.     }
    85.       }
    86.     }
    87. //    foreach ($badwords_list["normal"] as $value) {
    88. //    if (stripos($message, $value) !== false) {
    89. //        $bad = true;
    90. //        $badword = $value;
    91. //        break;
    92. //    }
    93. //    }
    94. /*
    95.     if (!$bad) {
    96.     foreach ($badwords_list["regexp"] as $value) {
    97.         if (preg_match("ґ".str_replace("ґ", "\\xB4", $value)."ґi", $message, $subpatterns)) {
    98.             $bad = true;
    99.             $badword = $subpatterns[0];
    100.             break;
    101.         }
    102.     }
    103.     }
    104. */
    105.     if ($bad) {
    106.         $players[$guid]->badwords_used ++;
    107.  
    108.         $GLOBALS['logging']->write(MOD_NOTICE, "Badwords: Player '".$players[$guid]->getName()."' used the bad word '$badword', PID: ".$players[$guid]->getPID().", GUID: $guid");
    109.  
    110.         if ($players[$guid]->badwords_used >= $mod->getCV("badwords", "warnstokick")) {
    111.             switch ($mod->getCV("badwords", "mode")) {
    112.                 case "tempban":
    113.                     //$players[$guid]->tempBan($mod->getCV("badwords", "kickreason"));
    114.             $players[$guid]->tempBan(str_replace("<WORD>", $badword, $mod->getCV("badwords", "kickreason")));
    115.                     break;
    116.                 case "kick":
    117.                     //$players[$guid]->kick($mod->getCV("badwords", "kickreason"));
    118.             $players[$guid]->kick(str_replace("<WORD>", $badword, $mod->getCV("badwords", "kickreason")));
    119.                     break;
    120.                 case "ban":
    121.                     //$players[$guid]->ban($mod->getCV("badwords", "kickreason"));
    122.             $players[$guid]->ban(str_replace("<WORD>", $badword, $mod->getCV("badwords", "kickreason")));
    123.                     break;
    124.             }
    125.         }
    126.         else {
    127.             $players[$guid]->say($mod->getLngString("usedBadWord", array("<WORD>"), array($badword)));
    128.         }
    129.     }
    130.  
    131. }
    132.  
    133. function badwords_read() {
    134.     if (!$GLOBALS['mod']->getCV("badwords", "enabled")) {
    135.        return;
    136.     }
    137.  
    138.     $configdir = $GLOBALS['mod']->getConfigDir();
    139.     global $badwords_list;
    140.     $list = file($configdir . "/plugins/badwords.lst");
    141.     if ($list === false) {
    142.         $GLOBALS['logging']->write(MOD_WARNING, "Badwords: File $configdir/plugins/badwords.lst could not be opened, badwords will be disabled");
    143.         $badwords_list = false;
    144.         return;
    145.     }
    146.     $normal = array();
    147.     $regexp = array();
    148.     foreach ($list as $value) {
    149.         $value = trim($value);
    150.         if (stripos($value, "regexp:") === 0) {
    151.             $regexp[] = substr($value, 7);
    152.         }
    153.         else {
    154.             $normal[] = $value;
    155.         }
    156.     }
    157.     $badwords_list = array("normal" => $normal, "regexp" => $regexp);
    158. }
    159.  
    160. function badwords_playerInit($guid) {
    161.     $GLOBALS['players'][$guid]->badwords_used = 0;
    162. }
    163.  
    164.  
    165. ?>
     
    #1 greu, 14 июл 2018
    Последнее редактирование модератором: 14 июл 2018
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    неизвестно, что сидит в $mod и откуда оно берется
     
  3. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Он не преобразовывает вообще слова или слова кириллические?
    АНАСТАСИЯ - это не проходит
    ANASTASIYA - а это норма
    ???
     
  4. greu

    greu Новичок

    С нами с:
    14 июл 2018
    Сообщения:
    4
    Симпатии:
    0
    Вообще не должно быть разницы кирилица или латиница , там выше уберает цвет текста, а ниже убирает знаки препинания . Надо что бы любой язык в нижний переводил регистр. Постараюсь узнать про mod. В словарике есть слова в нижнем регистре, если игроки пишут мат также то плагин работает, но когда НачИнаюТ писать так или иначе то он не видит их . Может можно добавить какое-то условие, чтобы на регистр не обращал внимание , 52 строка, это ведь условия?
     
    #4 greu, 15 июл 2018
    Последнее редактирование: 15 июл 2018
  5. greu

    greu Новичок

    С нами с:
    14 июл 2018
    Сообщения:
    4
    Симпатии:
    0
    Извиняюсь , 52 строка это не то.
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Значит он рассчитан на однобайтные кодировки,видимо внутри
    действительно strtolower, а не mb_strtolower. Надо посмотреть, к какому классу принадлежит $mod, а уже потом смотреть, что в методе
     
  7. greu

    greu Новичок

    С нами с:
    14 июл 2018
    Сообщения:
    4
    Симпатии:
    0
    $message = strtolower($message); вот так это работает, но только для латинице, кириллицу не видит (
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    @greu, я уже подсказал решение
     
  9. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Поэтому я выше и спрашивал про:

    Он не преобразовывает вообще слова или слова кириллические?
    АНАСТАСИЯ - это не проходит
    ANASTASIYA - а это норма
    ???