1、获取页面标题
代码语言:javascript复制//提取标题
preg_match('/<title>(?<title>.*?)</title>/i', $html, $titleArr);
$title = $titleArr['title'];
2、获取body主体内容,并将背景图片提取出来替换成其他图片地址
代码语言:javascript复制/**
* 获取BODY主体区域内容
* @param $html
* @param $urlRoot
* @return mixed
*/
function getBody($html,$urlRoot = null){
//提取BODY主体
preg_match('/<!--body-->(.*?)<!--body-->/is ', $html, $bodyArr);
if(!$bodyArr){
preg_match('/<body.*?>(.*?)</body>/is ', $html, $bodyArr);
}
$body = $bodyArr[1];
//替换img文件
$body = preg_replace('/(<[img|IMG].*src=['|"])(../)*(img.[^'||^"] )/',"$1$urlRoot$3",$body);
//替换html文件内的css背景图片
$body = preg_replace('~b(background(-image)?s*:(.*?)(s*['|"]?)(../)*(img.*?)?s*)~i',"$1$urlRoot$5)",$body);
return $body;
}
3、提取页面Description内容
代码语言:javascript复制function getDescription($html){
// Get the 'content' attribute value in a <meta name="description" ... />
$matches = array();
// Search for <meta name="description" content="Buy my stuff" />
preg_match('/<meta.*?name=("|')description("|').*?content=("|')(.*?)("|')/i', $html, $matches);
if (count($matches) > 4) {
return trim($matches[4]);
}
// Order of attributes could be swapped around: <meta content="Buy my stuff" name="description" />
preg_match('/<meta.*?content=("|')(.*?)("|').*?name=("|')description("|')/i', $html, $matches);
if (count($matches) > 2) {
return trim($matches[2]);
}
// No match
return null;
}
4、替换css文件的背景图片地址
代码语言:javascript复制/**
* 获取CSS内容
* @param $cssCnt
* @param $urlRoot
* @return mixed
*/
function getCss($cssCnt,$urlRoot =null){
//匹配包含 img文件夹的相对路径图片 (含义绝对路径的不包含在其中)
//匹配替换不一定准确,因为只是将 含义 ../ 的地址转为url 而没有考虑 ../../ 之类的层级关系
$css = preg_replace('~b(background(-image)?s*:(.*?)(s*['|"]?)(../)*(img.*?)?s*)~i',"$1$urlRoot$5)",$cssCnt);
//添加css前缀
$css = preg_replace('/b.(.*?)[,|{]/',"pat .$0",$cssCnt);
//TODO 压缩css
return $css;
}