Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.216.239.46] |
|
Сообщ.
#1
,
|
|
|
У меня есть такая задача. Найти все внеше-подключаемый к странице файлы. То есть мне надо выцепить все значения для аттрибута src в тегах. Пробовал так
$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>'); Не работает:( Может я не правильно делал. Наверное так и есть, тока мне от этого не легче;) Подсобите, еоллеги! |
Сообщ.
#2
,
|
|
|
Подожди немного, напишу...
|
Сообщ.
#3
,
|
|
|
Написал...
Честно говоря, я обычно пишу чистокровные парсеры строк, regexp'ами не пользуюсь. (<оффтопик>Как тебе, например, шаблонизатор уровня Smarty? </оффтопик>) Для решения твоей задачи я скомбинировал парсинг и регулярные выражения (чисто на regexp'ах слишком глючно и замороченно получается). Вот код: <?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) |
Сообщ.
#4
,
|
|
|
Большое спасибо. А насчёт Smarty ты хорошо сказал - я пользуюсь только им. Хорошая (и это мягко сказано) система шаблонизации;) За помощь спасибо и my respect
|
Сообщ.
#5
,
|
|
|
Пользуйся php_domxml.
|
Сообщ.
#6
,
|
|
|
Для разбора? Но это надо требовать шоб писали валидный XHTML, а этого тежело добиться от секреарши;)
|