0

PHP cURLを使用してリモートコンテンツを取得するために、次のコードを使用しています

$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;

このコードはコンテンツ全体を返しますが、すべてのスタイルシートを次の形式で印刷したいだけです。

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

str.replace() を使用してコンテンツをフィルタリングし、cURL を使用してスタイルシートのみを取得するにはどうすればよいですか?

4

4 に答える 4

2

要素をそのまま残したい場合<link>、PHP の strip_tags()関数を使用できます。

strip_tags — 文字列から HTML および PHP タグを取り除く

許可されたタグを定義する追加のパラメーターを受け入れるため、唯一の許可されたタグをそのタグに設定するだけ<link>です。

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

ここでの主な問題は、取得しようとしているコンテンツが本当にわからないことと、そのタスク用に設計されたツール以外で HTML コンテンツを解析しようとすると、白髪と神経質なけいれんを引き起こす可能性があることです;)

参考文献 -

于 2012-08-27T09:56:45.413 に答える
1

より良いアプローチは、PHP DOMを使用して HTML ツリーを解析し、必要なノードを取得し (この<link>場合は)、それらを適切にフィルタリングすることです。

于 2012-08-27T09:56:15.407 に答える
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.'">';
  }
}
于 2012-08-27T09:57:37.810 に答える
1

単純な html dom ライブラリを使用して、

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>";
}
于 2012-08-27T10:00:17.970 に答える