На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > Находим включаемые файлы , Разбор ХТМЛа. РНР
      У меня есть такая задача. Найти все внеше-подключаемый к странице файлы. То есть мне надо выцепить все значения для аттрибута src в тегах. Пробовал так
      ExpandedWrap disabled
        $text = "<html>fg,dlfg sdfkgj sdfglksdjf gsdflg jsdfgsdfjg sdfgjsdfkg" .
        " lkfgjsdklf sdfgjslkd <dgfd> dfgf<br /> <img src='ass.jpg'> " .
        "cfg h<img srsc='bla.js'></script></html>";
         
         
         $res = preg_match_all('<.+ src=[\'|\"]?(.+)+[\'|\"]+.*>', $text, $m);
         print('<pre>');
         print_r($m);
         print('</pre>');

      Не работает:( Может я не правильно делал. Наверное так и есть, тока мне от этого не легче;) Подсобите, еоллеги!
      Сообщение отредактировано: Rom@nych -
        Подожди немного, напишу...
          Написал...
          Честно говоря, я обычно пишу чистокровные парсеры строк, regexp'ами не пользуюсь. (<оффтопик>Как тебе, например, шаблонизатор уровня Smarty? :)</оффтопик>) Для решения твоей задачи я скомбинировал парсинг и регулярные выражения (чисто на regexp'ах слишком глючно и замороченно получается).
          Вот код:
          ExpandedWrap disabled
            <?php
            function extract_sources($html)
            {
                    $i = 0;
                    $current_item = 0;
                    $len = strlen($html);
                    while($i < $len)
                    {
                            $c = $html[$i];
                            $i++;
                            if($c == '<')
                            {
                                    // Извлекаем содержимое тэга
                                    $tag = '';
                                    do
                                    {
                                            $c = $html[$i];
                                            if($c == '/')
                                            {
                                                    // Поддержка тэгов XHTML (например, <img />
                                                    if($html[$i + 1] == '>')
                                                    {
                                                            $i++;
                                                            $c = $html[$i];
                                                            $i++;
                                                    }
                                                    else
                                                    {
                                                            $tag .= $c;
                                                            $i++;
                                                    }
                                            }
                                            elseif($c != '>')
                                            {
                                                    $tag .= $c;
                                                    $i++;
                                            }
                                    }
                                    while(($c != '>') && ($i < $len));
                                    // Содержит ли тэг аттрибут src?
                                    if(eregi('(src=)(\'|")[^?<>":&\*\|\\/]+(\'|")', $tag, $temp))
                                    {
                                            // если да - извлекаем аттрибут и удаляем лишние символы
                                            for($j = 0; $j < count($temp); $j++)
                                            {
                                                    $temp[$j] = eregi_replace('^(src=)', '', $temp[$j]);
                                                    $temp[$j] = eregi_replace('(\'|")', '', $temp[$j]);
                                                    if(eregi('^[^?<>":&\*\|\\/]+$', $temp[$j]))
                                                    {
                                                            // Последняя проверка
                                                            $result[$current_item] = $temp[$j];
                                                            $current_item++;
                                                    }
                                            }
                                    }
                            }
                    }
                    return $result;
            }
             
            $text = "<html>fg,dlfg sdfkgj sdfglksdjf gsdflg jsdfgsdfjg sdfgjsdfkg" .
            " lkfgjsdklf sdfgjslkd <dgfd> dfgf<br /> <img src='ass.jpg'> " .
            "cfg h<img srsc='bla.js'></script></html>";
             
            $srcs = extract_sources($text);
             
            echo '<pre>';
            print_r($srcs);
            echo '</pre>';
             
            ?>


          Кроме того, приаттачиваю сырец к сообщению (на случай, если подсветка опять глючить будет).
          Прикреплённый файлПрикреплённый файлsrc_extractor.zip (0.85 Кбайт, скачиваний: 145)
            Большое спасибо. А насчёт Smarty ты хорошо сказал - я пользуюсь только им. Хорошая (и это мягко сказано) система шаблонизации;) За помощь спасибо и my respect :)
              Пользуйся php_domxml.
                Для разбора? Но это надо требовать шоб писали валидный XHTML, а этого тежело добиться от секреарши;)
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0634 ]   [ 16 queries used ]   [ Generated: 25.04.24, 12:06 GMT ]