我正在使用以下代码来使用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的样式表?
答案 0 :(得分: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;)< / p>
参考文献 -
答案 1 :(得分:1)
更好的方法是使用PHP DOM来解析HTML树并检索所需的节点 - <link>
- 并适当地过滤它们。
答案 2 :(得分: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.'">';
}
}
答案 3 :(得分:1)
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>";
}