Нужна помощь в регулярном выражении

Тема в разделе "PHP", создана пользователем GorYa, 16 мар 2016.

  1. GorYa

    GorYa

    Регистрация:
    10 апр 2015
    Сообщения:
    57
    Симпатии:
    41
    Использую регулярное выражение для замены не алфавитных и не цифровых значений при загрузке файлов для проверки и изменений в названии, но почему то название "моя работа" выражение обрезает до "_работа", с английскими словами все отлично. Подскажите что я неправильно написал?
    $filename = preg_replace('#[^a-zA-Z0-9а-яА-ЯёЁ_\-\.]#u', '_', $filename);
    u-используется как обозначение кодировки, так как без него русские символы в виде кракозябр

    Спасибо Заранее
     
  2. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.581
    Симпатии:
    1.482
    PHP:
    <?php
        $filename 
    '#$%^&моя работа';
        
    $filename preg_replace('#[^a-zA-Z0-9а-яА-ЯёЁ_\-\.]#u''_'$filename);

        echo 
    "{$filename} <br />";

        
    $filename2 '$%my work';
        
    $filename2 preg_replace('#[^a-zA-Z0-9а-яА-ЯёЁ_\-\.]#u''_'$filename2);

        echo 
    $filename2;
    На выходе получаю:
    т.е. ваша регулярка рабочая.

    p.s. проверял на PHP 5.6
     
  3. GorYa

    GorYa

    Регистрация:
    10 апр 2015
    Сообщения:
    57
    Симпатии:
    41
    Спасибо, но к сожалению почему-то в файлах на русском языке обрезает первое слово перед пробелом, который в свою очередь заменяет на _
    Может быть дело в чем-то другом. Приведу полное выражение:

    public function cleanName($filename, $repeatCounter)
    {
    // Заменить все не алфавитно-цифровые символы (кроме _ и - и .) на _
    $filename = preg_replace('#[^a-zA-Z0-9а-яА-ЯёЁ_\-\.]#u', '_', $filename);
    $this->randomizeName($filename);

    return $filename;
    }
     
  4. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.581
    Симпатии:
    1.482
    что делает метод: randomizeName ?
     
  5. GorYa

    GorYa

    Регистрация:
    10 апр 2015
    Сообщения:
    57
    Симпатии:
    41
    попробовал загрузить файл с именем "my работа" и приходит в нормально виде "my_работа", почему он не принимает русские буквы до пробела не понимаю

    randomizeName как я понимаю должен говорить о случайном выборе имени. Сам не вдавался в суть этого. Так как мне было нужно, чтобы файлы можно было загружать как с русскими так и английскими именами, то я правил код компонента, чтобы это было возможным. Решение я кстати написал разработчикам, я задал им вопрос по поводу этого момента и так как сайт у них рухнул в настоящее время, то не знаю ответили ли они. А решение мне найти, так как загрузка файлов идет регулярно. Сам я новичок в php поэтому мне лично сложно понять сейчас что не так
     
  6. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.581
    Симпатии:
    1.482
    выложите сюда кодяру этого метода
     
  7. GorYa

    GorYa

    Регистрация:
    10 апр 2015
    Сообщения:
    57
    Симпатии:
    41
    На всякий случай версия php 5.5.9, так как может дело и в этом. Как вариант расматриваю прописать вместо а-яА-Я полностью абвгдеёжзиёклмнопрстуфхцчшщьъыэюяАБВГДЕЁЖЗИЁКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯ.

    Код:

    PHP:
    protected function randomizeName(&$filename)
       {
         
    $params $this->getParams();

         if (
    $params->get('random_filename') == 1)
         {
           
    $length = (int) $params->get('length_random_filename');

           if (
    $length 6)
           {
             
    $length 6;
           }

           
    $key "";
           
    $possible "0123456789bcdfghjkmnpqrstvwxyzBCDFGHJKLMNPQRTVWXYZ";
           
    $i 0;

           while (
    $i $length)
           {
             
    $char String::substr($possiblemt_rand(0String::strlen($possible) - 1), 1);
             
    $key .= $char;
             
    $i++;
           }

           
    $ext JFile::getExt($filename);
           
    $filename $key '.' $ext;
         }
       }
    }
     
    Последнее редактирование: 16 мар 2016
  8. GorYa

    GorYa

    Регистрация:
    10 апр 2015
    Сообщения:
    57
    Симпатии:
    41
    Сегодня пытался найти проблему и вот о чем подумал, а не может быть это потому что у меня стоит php 5.5.9? Ведь с версии php 5.6 в php.ini по умолчанию стоит UTF-8, а до пустое значение. Сейчас прямо нет возможности это проверить, но завтра обязательно