Удаляются пробелы из названия сайта

b0re

Участник
Сообщения
99
Реакции
5
Статистика HLstatsX Community Edition 1.6.19-25. В настройках сайта при сохранении названия сайта удаляются пробелы. Я так понимаю это из-за preg_replace в options.php:83?
options.php:83:
    if (($this->title == 'Fonts') || ($this->title == 'General')) {
        $optval = $_POST[$opt->name];
        $search_pattern  = array('/script/i', '/;/', '/%/');
        $replace_pattern = array('', '', '');
        $optval = preg_replace($search_pattern, $replace_pattern, $optval);
        $optval = $db->escape($optval);
    } else {
        $optval = valid_request($_POST[$opt->name], 0);
    }
    ...
Это наверно сделано для защиты от инъекций? Как-то исправить это для названия сайта можно?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #2
Дело не в этом.
Что за браузер хоть?
 

b0re

Участник
Сообщения
99
Реакции
5
Firefox 86.0 (64-bit)
В Хроме проверил - то же самое
Сообщения автоматически склеены:

Да, действительно. Это из-за другой функции - функции valid_request() в том же options.php на строке 86. Эта функция описана в functions.php на строке 94:

functions.php:
function valid_request($str, $numeric = false)
{
    global $db;
    if(is_array($str))
        return "";
    $search_pattern = array("/[^A-Za-z\x{0410}-\x{044F}0-9Ёё\[\]*\.,=()!\"$%&^`':;#+~_\-|<>\/\\@{}\s]/u");
    $replace_pattern = array('');
    $str = preg_replace($search_pattern, $replace_pattern, $str);
    echo '<pre>';
    print_r($str);
    echo '</pre>';
    if ( $numeric == false )
    {
        return $db->escape($str);
    }
    else
    {
        if ( is_numeric($str) )
            return intval($str);
        else
            return -1;
    }
}

Когда вставляешь в регулярку символ проблеа '\s', то пробелы сохраняются. Вопрос: пробел просто забыли поставить или это сделано с целью защиты от уязвимостей?
 
Последнее редактирование:
Сверху Снизу