Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с парсером favicon
 
 автор: Kreker   (13.08.2008 в 23:33)   письмо автору
 
 

нужно регулярное выражения которое выбирает путь к favicon из указаной ссылкой страницы

нужно найти строку

<link rel="icon" href="/favicon.ico" type="image/x-icon">

или
<link rel="shortcut icon" href="http://site.ru/favicon.ico" type="image/x-icon">


проблема с самим регулярным выражением

  Ответить  
 
 автор: BinLaden   (13.08.2008 в 23:41)   письмо автору
 
   для: Kreker   (13.08.2008 в 23:33)
 

> проблема с самим регулярным выражением

А где оно?:)

  Ответить  
 
 автор: Kreker   (14.08.2008 в 00:06)   письмо автору
 
   для: BinLaden   (13.08.2008 в 23:41)
 

проблема его сделать

<?php 
      $content 
file_get_contents("http://vfose.ru"); 
      
preg_match("|<link rel=\"shortcut icon\" href=\"(    *???*    )\" type=\"image/x-icon\">|i"$content$link);
      print 
$link[1];    
?>

вот незнаю что заместо *???* поставить

  Ответить  
 
 автор: AcidTrash   (14.08.2008 в 00:31)   письмо автору
 
   для: Kreker   (14.08.2008 в 00:06)
 

 preg_match("|<link rel=\"shortcut icon\" href=\"(.+?)\" type=\"image/x-icon\">|i", $content, $link); 

  Ответить  
 
 автор: Kreker   (14.08.2008 в 01:01)   письмо автору
 
   для: AcidTrash   (14.08.2008 в 00:31)
 

это работает спасибо

еще небольшая проблема на некоторых сайта строка иконки такая
<link rel="shortcut icon" href="http://vkontakte.ru/images/favicon.ico" />

как сделать чтоб присутвие или отсутсвие типа type="image/x-icon" не учитывалось
а так же если вожножно <link rel="shortcut icon" и <link rel="icon" можно было описать в одном регулярном выражении

  Ответить  
 
 автор: xx77   (14.08.2008 в 13:12)   письмо автору
 
   для: Kreker   (14.08.2008 в 01:01)
 

Если учесть что теги могут быть в любом регистре и атрибуты ещё могут идти в любом порядке ,
и не учитывать что могут быть пробелы до и после знака =
,)
,, то получится громоздкое и медленное выражение похожее на такое.
<pre><?php

$str 
'
    <link rel="shortcut icon"   type=\'image/x-icon\' href="1/favicon.ico"/>
    <link href="2/favicon.ico" rel="shortcut icon"/>
    <link type="image/x-icon" href="3/favicon.ico" 
        rel="shortcut icon"/>
    <link href=../4/favicon.ico  type=\'image/x-icon\' rel=\'shortcut icon\'/>
    <link href=\'/5/favicon.ico\' rel=\'shortcut icon\'/>
    <link href="style.css" rel="stylesheet"/>
    '
;
    
preg_match_all(
'#<link(?:(?!\shref)(\srel=[\'"]shortcut icon)?[^>]\S*)*\shref=[\'"]?([^\'" >]+)(?(1)|(?:(?!\srel)[^>]\S*)*\srel=[\'"]shortcut icon)#is'
$str$str);
print_r($str[2]);
?>

, медленно работает даже с такой небольшой строкой линков

  Ответить  
 
 автор: xx77   (14.08.2008 в 13:31)   письмо автору
 
   для: xx77   (14.08.2008 в 13:12)
 

лучше как-то попроще
, типа такого:
<pre><?php
$str 
'
    <link rel="shortcut icon"   type=\'image/x-icon\' href="1/favicon.ico"/>
    <link href="2/favicon.ico" rel="shortcut icon"/>
    <link type="image/x-icon" href="3/favicon.ico" 
        rel="shortcut icon"/>
    <link href=../4/favicon.ico  type=\'image/x-icon\' rel=\'shortcut icon\'/>
    <link href=\'/5/favicon.ico\' rel=\'shortcut icon\'/>
    <link href="style.css" rel="stylesheet"/>
    '
;
    
preg_match_all(
'#<link[^>]*?\shref=[\'"]?((?:(?!\.ico)[^\s>\'"])*\.ico)(?=[\s\'">/])#i'
$str$str);
print_r($str[1]);
?>

  Ответить  
 
 автор: Kreker   (15.08.2008 в 01:51)   письмо автору
 
   для: xx77   (14.08.2008 в 13:31)
 

спасибо огромное второй вариант лучше,
настолько я понял иконку или вообще могут не прописывать или прописывают максимум 2 раза

  Ответить  
 
 автор: xx77   (15.08.2008 в 12:59)   письмо автору
 
   для: Kreker   (15.08.2008 в 01:51)
 

>вариант лучше

может и лучше , но выигрывая в скорости , проигрывается в чём-то другом. И наверное не выберет значения в которых например имя файла favicon.ico.ico ,)
а так слабо понимаю для чего Вы хотите использовать получение адресов этих .ico ,
и бывают-ли другие расширения.
просто попробовал изложить кусочек своей мысли по этому поводу (с) .)
я так думаю что получитса выражение быстрее если не проверять наличие атрибута rel=-"......"
, а просто сверять расширение файла,
может-быть нужно получить весь тег в $str[0]
как-то так например
<?
preg_match_all

'#<link[^>]*?\shref=[\'"]?([^\s>\'"]+)(?<=\.ico)[^>]*>#i',  
$str$str); 
# должно быть получше с "favicon.ico.ico" засчёт(?<=\.ico)
print_r($str);

или может нужно выбрать первое или последнее попавшееся значение
из того что могут навставлять или не навставлять в файл ,)

  Ответить  
 
 автор: Kreker   (15.08.2008 в 14:19)   письмо автору
14.1 Кб
 
   для: xx77   (15.08.2008 в 12:59)
 

Спасибо попробую
а пути иконок нужны для каталога ссылок, чтобы можно было скопировать из на диск,
не на всех сайтах иконка /favicon.ico

прикрепил скриншот

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования