2012-04-03 64 views
1

在一個WordPress博客中,我使用以下函數來抓取頁面(單張張視圖)並找到第一張圖片,如果找不到,則使用默認圖片:PHP函數來抓取第一張圖片

function catch_that_image() { 
    global $post, $posts; 
    $first_img = ''; 
    ob_start(); 
    ob_end_clean(); 
    $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches); 
    $first_img = $matches [1] [0]; 

    if(empty($first_img)){ //Defines a default image 
    $first_img = "http://custome_url_for_default_image.png"; 
    } 
    return $first_img; 
} 

我試圖將它粘貼到Tumblr主題中,但遇到一些問題(它不作爲PHP函數加載)。當然,我錯過了一些東西。如果任何人有解決這個問題的想法,我會很樂意嘗試。

感謝,

P.

+0

你的意思是 「刮」? – mmcglynn 2012-04-03 18:17:03

+0

對不起:網頁抓取,抓取,收穫......我也意識到我需要PHP腳本的開始和結束標記,但添加它們並不會使該功能起作用。 – Parneix 2012-04-03 18:29:16

回答

5

做到這一點,最好的辦法是avoid using regexes to parse HTML

嘗試使用DOM文檔:

function catch_that_image() { 
    global $post; 
    $dom = new DOMDocument(); 
    $dom->loadHtml($post->post_content); 
    $imgTags = $dom->getElementsByTagName('img'); 
    if ($imgTags->length > 0) { 
     $imgElement = $imgTags->item(0); 
     return $imgElement->getAttribute('src'); 
    } else { 
     return 'http://custome_url_for_default_image.png'; 
    } 
} 
+0

這也是我用來解決這個問題的確切策略。 DOMDocument可以非常優雅地解決這個問題。布拉沃。 – 2012-04-03 19:18:39

+0

它確定似乎更清潔,我很高興瞭解編碼這種功能的「正統」或正確的方式。儘管我使用開放和關閉的PHP標籤並確保將函數包含在PHP代碼中,但我仍然在做一些錯誤的事情,因爲代碼不能用作PHP代碼:它的一部分實際上出現在我的網站上(它是可見的) ''。我會做更多的測試並試圖弄清楚。謝謝你的建議。 – Parneix 2012-04-03 20:40:26

+0

[更新]顯然(如果我沒有錯)Tumblr的主題不支持PHP代碼...我的這一個不好。雖然可能有一種解決方法:在自主服務器上託管PHP腳本並在主題內調用它。但這就是全新的球賽。感謝您的支持! – Parneix 2012-04-03 21:20:53