PHP正则匹配Html内容,并通过浏览器弹框下载Excel
一、我结合之前自己写的2篇,写了这一篇
PHP打印Excel表格并下载 去看看
PHP正则匹配html标签 去看看
二、浏览器输入地址,访问,弹出Excel下载框
三、下载完成后Excel的内容
四、完整代码
<?php
namespace app\index\controller;
class Ablog extends Base
{
/**
* 开始方法
*/
public function start(){
$data = $this->getData();
$this->downExcel($data);
}
/**
* 浏览器弹框下载Excel
* @param $data 存放到表格中的数据
*/
public function downExcel($data){
//打开请求头
$filename = "博文信息(".date("Ymd").")";
//设置浏览器信息
header("Content-type:application/vnd.ms-excel;charset=UTF-8");
header("Content-Disposition:filename=".$filename.".xls");
ob_clean(); //清空缓冲区
echo '<meta http-equiv="Content-Type" content="text/html; charset=GBK" />';
$content = '<table border="1" cellspacing="0">'; // width="70%"
$content .='<tr >';//style="font-size: 16px;font-weight: 800;"
$content .='<th align="center" height="30" width="120">'.mb_convert_encoding("类型",'GBK').'</th>';
$content .='<th align="center" height="30" width="120">'.mb_convert_encoding("标题",'GBK').'</th>';
$content .='</tr>';
foreach ($data as $k => $v){
$content .='<tr>';
$content .='<td height="30" align="center">'.mb_convert_encoding($v['type'],'GBK').'</td>';
$content .='<td height="30" align="center">'.mb_convert_encoding($v['title'],'GBK').'</td>';
$content .='</tr>';
}
$content .='</table>';
echo $content;
exit();
}
//正则匹配html中的数据
public function getData(){
$url = "https://blog.csdn.net/cungudafa";
$html = file_get_contents($url);
//匹配是原创还是转载,匹配标题
$pattern = '/<span class="article-type type-1 float-none">([^\<]+)<\/span>([^\<]+)<\/a>/';
preg_match_all($pattern, $html, $result);
if (empty($result[0])){
exit('匹配内容失败!');
}
//每一个()对应一个数组,默认第0个是匹配所有内容,所以匹配的结果里有3个数组
// $allHtml = $result[0];
// var_export($allHtml);die(); //打印看下效果
//$allType 和 $allTitle 数量一致
$allType = $result[1];
$allTitle = $result[2];
//处理数据
$data = [];
foreach ($allType as $key => $value){
$data[] = [
'type' => $value,
'title' => trim($allTitle[$key]) //获取标题,去除空格
];
}
return $data;
}
}