服务器之家

服务器之家 > 正文

php切割页面div内容的实现代码分享

时间:2020-01-06 15:54     来源/作者:Zjmainstay

亮点: 
1、利用php也能实现对页面div的切割处理。这里的做法抛砖引玉,希望读者能够提供更加完美的解决方案。 
2、切割处理方法已经封装成一个方法,可以直接引用。 
3、顺便加上标签云的截取。//getWebDiv('id="taglist"','//www.zzvips.com/tags.html'); 

复制代码代码如下:


<?php 
header("Content-type: text/html; charset=utf-8"); 
function getWebDiv($div_id,$url=false,$data=false){ 
if($url !== false){ 
$data = file_get_contents( $url ); 

$charset_pos = stripos($data,'charset'); 
if($charset_pos) { 
if(stripos($data,'utf-8',$charset_pos)) { 
$data = iconv('utf-8','utf-8',$data); 
}else if(stripos($data,'gb2312',$charset_pos)) { 
$data = iconv('gb2312','utf-8',$data); 
}else if(stripos($data,'gbk',$charset_pos)) { 
$data = iconv('gbk','utf-8',$data); 


preg_match_all('/<div/i',$data,$pre_matches,PREG_OFFSET_CAPTURE); //获取所有div前缀 
preg_match_all('/<\/div/i',$data,$suf_matches,PREG_OFFSET_CAPTURE); //获取所有div后缀 
$hit = strpos($data,$div_id); 
if($hit == -1) return false; //未命中 
$divs = array(); //合并所有div 
foreach($pre_matches[0] as $index=>$pre_div){ 
$divs[(int)$pre_div[1]] = 'p'; 
$divs[(int)$suf_matches[0][$index][1]] = 's'; 

//对div进行排序 
$sort = array_keys($divs); 
asort($sort); 
$count = count($pre_matches[0]); 
foreach($pre_matches[0] as $index=>$pre_div){ 
//<div $hit <div+1 时div被命中 
if(($pre_matches[0][$index][1] < $hit) && ($hit < $pre_matches[0][$index+1][1])){ 
$deeper = 0; 
//弹出被命中div前的div 
while(array_shift($sort) != $pre_matches[0][$index][1] && ($count--)) continue; 
//对剩余div进行匹配,若下一个为前缀,则向下一层,$deeper加1, 
//否则后退一层,$deeper减1,$deeper为0则命中匹配,计算div长度 
foreach($sort as $key){ 
if($divs[$key] == 'p') $deeper++; 
else if($deeper == 0) { 
$length = $key-$pre_matches[0][$index][1]; 
break; 
}else { 
$deeper--; 


$hitDivString = substr($data,$pre_matches[0][$index][1],$length).'</div>'; 
break; 


return $hitDivString; 

echo getWebDiv('id="taglist"','//www.zzvips.com/tag/'); 
//End_php 


考虑到id符号问题,id="u"由用户自己填写。 
声明:此段php只针对带 id div内容的读取。 
完善:匹配任意可闭合带id标签 

复制代码代码如下:


View Code 
<?php 
header("Content-type: text/html; charset=utf-8"); 
function getWebTag($tag_id,$url=false,$tag='div',$data=false){ 
if($url !== false){ 
$data = file_get_contents( $url ); 

$charset_pos = stripos($data,'charset'); 
if($charset_pos) { 
if(stripos($data,'utf-8',$charset_pos)) { 
$data = iconv('utf-8','utf-8',$data); 
}else if(stripos($data,'gb2312',$charset_pos)) { 
$data = iconv('gb2312','utf-8',$data); 
}else if(stripos($data,'gbk',$charset_pos)) { 
$data = iconv('gbk','utf-8',$data); 


preg_match_all('/<'.$tag.'/i',$data,$pre_matches,PREG_OFFSET_CAPTURE); //获取所有div前缀 
preg_match_all('/<\/'.$tag.'/i',$data,$suf_matches,PREG_OFFSET_CAPTURE); //获取所有div后缀 
$hit = strpos($data,$tag_id); 
if($hit == -1) return false; //未命中 
$divs = array(); //合并所有div 
foreach($pre_matches[0] as $index=>$pre_div){ 
$divs[(int)$pre_div[1]] = 'p'; 
$divs[(int)$suf_matches[0][$index][1]] = 's'; 

//对div进行排序 
$sort = array_keys($divs); 
asort($sort); 
$count = count($pre_matches[0]); 
foreach($pre_matches[0] as $index=>$pre_div){ 
//<div $hit <div+1 时div被命中 
if(($pre_matches[0][$index][1] < $hit) && ($hit < $pre_matches[0][$index+1][1])){ 
$deeper = 0; 
//弹出被命中div前的div 
while(array_shift($sort) != $pre_matches[0][$index][1] && ($count--)) continue; 
//对剩余div进行匹配,若下一个为前缀,则向下一层,$deeper加1, 
//否则后退一层,$deeper减1,$deeper为0则命中匹配,计算div长度 
foreach($sort as $key){ 
if($divs[$key] == 'p') $deeper++; 
else if($deeper == 0) { 
$length = $key-$pre_matches[0][$index][1]; 
break; 
}else { 
$deeper--; 


$hitDivString = substr($data,$pre_matches[0][$index][1],$length).'</'.$tag.'>'; 
break; 


return $hitDivString; 

echo getWebTag('id="nav"','http://mail.163.com/html/mail_intro/','ul'); 
echo getWebTag('id="homeBanners"','http://mail.163.com/html/mail_intro/'); 
echo getWebTag('id="performance"','http://mail.163.com/html/mail_intro/','section'); 
//End_php 


作者: Zjmainstay

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
返回顶部

262
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40