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

Статус
В этой теме нельзя размещать новые ответы.

Demon425

Постоялец
Регистрация
9 Июл 2008
Сообщения
472
Реакции
120
Привет всем.

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

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

Код:
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 и пр. а также их отсутствие.

Очень нужна помощь...
 
Привет всем.

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

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

Код:
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 и пр. а также их отсутствие.

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

PHP:
preg_match ( "#<img[^>]+src\s*?=\s*?[\"'](\S+?)['\"](.+?)>#i", $text, $txt );
 
В общем решается это так:

Код:
$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];
}

Вопрос решён, тему можно закрывать.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху