2012-08-27 61 views
0

我用下面的代碼獲取遠程內容使用PHP捲曲PHP捲曲返回遠程頁面樣式

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://example.com"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 
curl_close($ch); 
echo $output; 

此代碼返回全部內容,但我只是想打印所有stylsheets在下面的格式。

<link rel="stylesheet" href="http://www.example.com/css/style1.css"> 
<link rel="stylesheet" href="http://www.example.com/css/style2.css"> 

如何使用str.replace()只與捲曲得到stylsheets過濾內容?

回答

1

使用simple html dom library

include('simple_html_dom.php'); 

// get DOM from URL or file 
$html = file_get_html('http://www.example.com/'); 
// or your can get $html string through your curl request and say 
// $html = str_get_html($html); 

// find all "link" 
foreach($html->find('link') as $e) { 
    if($e->type="text/css" && strpos($e->href, ":/") !=== false) // you don't want relative css hrefs. right? 
    echo $e->href."<br>"; 
} 
+3

從'simple_html_dom.php'出現的地方可能會很有趣。 – j0k

1

一個更好的方法是使用PHP DOM解析HTML樹並檢索所需的節點 - <link>在你的情況下 - 並適當地過濾它們。

2

如果你只有只有想要離開<link>元素完好,那麼你可以使用PHP的strip_tags()函數。

用strip_tags - 地帶HTML和PHP標籤從字符串

它可以接受一個定義允許變量的附加參數,因此,所有你需要做的就是設置只允許標籤是<link>標籤。

$output = curl_exec($ch); 
$linksOnly = strip_tags($ouput,'link'); 

這裏的主要問題是,你真的不知道你要什麼樣的內容來獲得,並試圖解析HTML內容比專爲任務會給你留下grey hair and a nervious twitch工具其他任何東西;)

參考 -

1

使用正則表達式:

preg_match_all('/rel="stylesheet" href="(.*)">/', $output, $matches); 

if (isset($matches[1]) && count($matches[1])) 
{ 
    foreach ($matches as $value) 
    { 
    echo '<link rel="stylesheet" href="'.$value.'">'; 
    } 
} 
+1

如果我的網站有'<鏈接類型= 「文/ CSS」 相對= 「樣式」 媒體= 「屏幕上的」 href = 「/富/」/> '?我認爲正則表達式有一些注意事項。 –

+0

我不能同意更多,但OP不提供任何輸出示例。 'href'也可以在'rel'之前。 – j0k

+0

這就是爲什麼人們說你不應該使用正則表達式來解析HTML,我認爲^ _ ^啊,它確實回答了這個問題,所以+1。 –