Вопрос по фильтру preg_match

Тема в разделе "Как сделать...", создана пользователем Demon425, 2 окт 2010.

Статус темы:
Закрыта.
  1. Demon425

    Demon425

    Регистр.:
    9 июл 2008
    Сообщения:
    461
    Симпатии:
    116
    Привет всем.

    Сразу к вопросу.

    Есть такой кусок кода:

    Код:
    preg_match ( "#<img src=[\"\'](.+?)[\"\'](.*)/>#si", $row['short_story'], $match );
    
                if ( trim ( $match[1] ) == '' )
                {
                     preg_match ( "#<!--TBegin--><a href=[\"\'](.+?)[\"\'](.*)></a><!--TEnd-->#si", $row['short_story'], $match );
                }
    
                   if ( trim ( $match[1] ) != '' )
                   {
                        $dir = ROOT_DIR . '/uploads/afishathumbs/';
    
                     $allow_exts = array ( 'png', 'jpg', 'jpeg', 'gif' );
                        $file_ext      = @end ( explode ( '.', $match[1] ));
                        $file_name     = md5 ( $match[1] ) . "." . $file_ext;
    
                        if ( in_array ( $file_ext, $allow_exts ))
                        {
                              if ( !file_exists ( $dir ))
                              {
                                      @mkdir ( $dir, 0777 );
                                      @chmod ( $dir, 0777 );
                              }
    
                              if ( !file_exists ( $dir . $file_name ))
                              {
                                    @copy ( $match[1], $dir . $file_name );
    
                                    require_once ENGINE_DIR . '/modules/afisha.imageclass.php';
    
                                    $image = new class_image ( $dir . $file_name );
                                    $image->thumbnail ( 150 );
                                    $image->save();
                             }
    
                             $has_image = file_exists ( $dir . $file_name );
                        }
                   }
                  else $has_image = false;
    
                  if ( $has_image )
                  {
                    $title = stripslashes ( $row['title']);
                    $img = "<a href=\"{$config['http_home_url']}?newsid={$row['id']}\" title=\"{$title}\"><img src=\"{$config['http_home_url']}uploads/afishathumbs/{$file_name}\" alt=\"{$title}\" border=\"0\" /></a>";
                  }
                  else $img = "<img src=\"{$config['http_home_url']}uploads/afishathumbs/noimage.png\" alt=\"Нет картинки!\" border=\"0\" />";
    
                $buffer .= "{$img}<br />\n";
    Так вот, картинки, вставленные тегом
    Код:
    <img src=
    он вырезает нормально, но как только попадается что-то типа:
    Код:
    <img style="float: left; margin-left: 10px; margin-right: 10px; border: 0px none currentColor;" title="_тайтл_" src="путь к картинке" alt="ххххххххххххх" />
    - скрипт не находит картинку.

    Вопрос в том, как переписать фильтр таким образом, чтобы изображение определялось всегда, независимо от положения src= внутри img-вставки, т.е. наличие style, title и пр. а также их отсутствие.

    Очень нужна помощь...
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    558
    PHP:
    preg_match "#<img[^>]+src\s*?=\s*?[\"'](\S+?)['\"](.+?)>#i"$text$txt );
     
    Haliff3007 нравится это.
  3. Demon425

    Demon425

    Регистр.:
    9 июл 2008
    Сообщения:
    461
    Симпатии:
    116
    В общем решается это так:

    Код:
    $mask = '#http:.{20,100}(\.jpg|\.jpeg|\.gif|\.png)#i';
    
    preg_match($mask, $row['short_story'], $image);
    $image=$image[0];
    if ($image=='') 
    {
    preg_match($shab, $row['xfields'], $image);
    $image=$image[0];
    }
    if ($image=='') 
    {
    preg_match($shab, $row['full_story'], $image);
    $image=$image[0];
    }
    Вопрос решён, тему можно закрывать.
     
Статус темы:
Закрыта.