2010-01-02 37 views
8

我想在我的網站上列出特色網站,我認爲這將是很酷的兌現和使用他們的圖標。在JSP或XSLT中,如何從域中獲取任意URL?我可以發佈PHP或JavaScript,但XSLT是首選的方法。如何檢索網站的圖標?

+2

得到一個favicon可以使用這個:http://www.google.com/s2/favicons?domain=domain_name – 2017-06-14 14:59:49

回答

17

爲了得到一個網站的圖標,你需要加載每個功能網站的索引HTML,檢查以下任一操作:

HTML:

<link rel="icon" type="image/vnd.microsoft.icon" href="http://example.com/image.ico"> 
<link rel="icon" type="image/png" href="http://example.com/image.png"> 
<link rel="icon" type="image/gif" href="http://example.com/image.gif"> 

XHTML:

<link rel="icon" type="image/vnd.microsoft.icon" href="/somepath/image.ico" /> 
<link rel="icon" type="image/png" href="/somepath/image.png" /> 
<link rel="icon" type="image/gif" href="/somepath/image.gif" /> 

Internet Explorer可能會使用稍微不同的格式:

<link rel="SHORTCUT ICON" href="http://www.example.com/myicon.ico" /> 

另請注意,由於大多數Web瀏覽器不需要HTML鏈接來檢索收藏夾圖標,因此如果找不到以上任何鏈接引用,則還應該在網站的文檔根目錄中檢查favicon.ico

使用PHP,很容易通過使用file_get_contents($url)得到一個網頁的HTML內容:

$url = 'http://www.exmaple.com'; 
$output = file_get_contents($url); 
+2

優秀!感謝Daniel的細節。我將檢查PHP教程,並讓你知道它是如何工作的。 – mobibob 2010-01-02 05:02:45

0

這是我在嘗試它。它使用各種策略來解決許多可能的情況:

<? 
/* 
    nws-favicon : Get site's favicon using various strategies 

    This script is part of NWS 
    https://github.com/xaccrocheur/nws/ 

*/ 


function CheckImageExists($imgUrl) { 
    if (@GetImageSize($imgUrl)) { 
     return true; 
    } else { 
     return false; 
    }; 
}; 

function getFavicon ($url) { 

$fallback_favicon = "/var/www/favicon.ico";  
// $fallback_favicon = "http://stackoverflow.com/favicon.ico"; 


    $dom = new DOMDocument(); 
    @$dom->loadHTML($url); 
    $links = $dom->getElementsByTagName('link'); 
    $l = $links->length; 
    $favicon = "/favicon.ico"; 
    for($i=0; $i<$l; $i++) { 
     $item = $links->item($i); 
     if(strcasecmp($item->getAttribute("rel"),"shortcut icon") === 0) { 
      $favicon = $item->getAttribute("href"); 
      break; 
     } 
    } 

    $u = parse_url($url); 

    $subs = explode('.', $u['host']); 
    $domain = $subs[count($subs) -2].'.'.$subs[count($subs) -1]; 

    $file = "http://".$domain."/favicon.ico"; 
    $file_headers = @get_headers($file); 

    if($file_headers[0] == 'HTTP/1.1 404 Not Found' || $file_headers[0] == 'HTTP/1.1 404 NOT FOUND' || $file_headers[0] == 'HTTP/1.1 301 Moved Permanently') { 

     $fileContent = @file_get_contents("http://".$domain); 

     $dom = @DOMDocument::loadHTML($fileContent); 
     $xpath = new DOMXpath($dom); 

     $elements = $xpath->query("head/link//@href"); 

     $hrefs = array(); 

     foreach ($elements as $link) { 
      $hrefs[] = $link->value; 
     } 

     $found_favicon = array(); 
     foreach ($hrefs as $key => $value) { 
      if(substr_count($value, 'favicon.ico') > 0) { 
       $found_favicon[] = $value; 
       $icon_key = $key; 
      } 
     } 

     $found_http = array(); 
     foreach ($found_favicon as $key => $value) { 
      if(substr_count($value, 'http') > 0) { 
       $found_http[] = $value; 
       $favicon = $hrefs[$icon_key]; 
       $method = "xpath"; 
      } else { 
       $favicon = $domain.$hrefs[$icon_key]; 
       if (substr($favicon, 0, 4) != 'http') { 
        $favicon = 'http://' . $favicon; 
        $method = "xpath+http"; 
       } 
      } 
     } 

     if (isset($favicon)) { 
      if (!CheckImageExists($favicon)) { 
       $favicon = $fallback_favicon; 
       $method = "fallback"; 
      } 
     } else { 
      $favicon = $fallback_favicon; 
      $method = "fallback"; 
     } 

    } else { 
     $favicon = $file; 
     $method = "classic"; 

     if (!CheckImageExists($file)) { 
      $favicon = $fallback_favicon; 
      $method = "fallback"; 
     } 

    } 
    return $favicon; 
} 

?> 
0

打開頁面源代碼(右鍵單擊查看頁面源代碼)找到下面提到的行,單擊images/favicon.png鏈接。

<link rel="icon" href="images/favicon.png" type="image/png" sizes="16x16">