文章中按一定字符串插入广告代码,不破坏原文章中html代码

现在有一篇文章,然后我想把这篇文章内插入广告代码(<script src="广告链接"></script>),每隔800字节添加一段广告代码。文章中含有若干html标签,位置不能确定,广告代码不能插入到标签之间,如果插入广告代码处正好遇到html标签,就将广告代码插入位置往后移动,直至不在html标签中为止。请问代码该怎么实现呢?

答:中文 英文 数字 混合,需要注意编码问题
还要判断html标签,还要注意标签嵌套的问题,还有<img>标签无嵌套。

 

$str =<<<eof
㈥现㈣在有一篇文章㈩,然后我想把
<font color="#ff0000"><a href="xxx">asd</a></font>这篇文章内插入广告代码,<div><font color="#ff0000"><a href="xxxyyy">这个代码</a></font></div>每隔800字节添加一段广告代码。<img =src="xxxxx">文章中含有若干html标签,<div><img =src="xxxxx"></div>位置不能确定,广告代码不能插入到标签之间,如果插入广告<div><img =src="xxxxx"> sdfdd</div>代码处正好遇到html标签,就将广告代码插入<div><img =src="xxxxx"></div>位置往后移动,直至不在html标签中为止。<div><img =src="xxxxx"></div>请问代码该怎么实现呢?<a href="xxxxx">昨天</a>下了一场大雪。<img src="../img/xx.jpg">这是一张图⑩片②。
希望大家能给予帮助,谢谢!
㈥现㈣在有一篇文章㈩,然后我想把
<font color="#ff0000"><a href="xxx">asd</a></font>这篇文章内插入广告代码,<div><font color="#ff0000"><a href="xxxyyy">这个代码</a></font></div>每隔800字节添加一段广告代码。<img =src="xxxxx">文章中含有若干html标签,<div><img =src="xxxxx"></div>位置不能确定,广告代码不能插入到标签之间,如果插入广告<div><img =src="xxxxx"> sdfdd</div>代码处正好遇到html标签,就将广告代码插入<div><img =src="xxxxx"></div>位置往后移动,直至不在html标签中为止。<div><img =src="xxxxx"></div>请问代码该怎么实现呢?<a href="xxxxx">昨天</a>下了一场大雪。<img src="../img/xx.jpg">这是一张图⑩片②。
希望大家能给予帮助,谢谢!
㈥现㈣在有一篇文章㈩,然后我想把
<font color="#ff0000"><a href="xxx">asd</a></font>这篇文章内插入广告代码,<div><font color="#ff0000"><a href="xxxyyy">这个代码</a></font></div>每隔800字节添加一段广告代码。<img =src="xxxxx">文章中含有若干html标签,<div><img =src="xxxxx"></div>位置不能确定,广告代码不能插入到标签之间,如果插入广告<div><img =src="xxxxx"> sdfdd</div>代码处正好遇到html标签,就将广告代码插入<div><img =src="xxxxx"></div>位置往后移动,直至不在html标签中为止。<div><img =src="xxxxx"></div>请问代码该怎么实现呢?<a href="xxxxx">昨天</a>下了一场大雪。<img src="../img/xx.jpg">这是一张图⑩片②。
希望大家能给予帮助,谢谢!
eof;

$exa = array('','','','','','','','','','');
$exb = array('','','','','','','','','','');
$str = str_replace($exa,'',$str);
$str = str_replace($exb,'',$str);
$char = 'gbk'; //设置字符编码
$gg = '<script src="xxxx"></script>'; //要加的广告字符
$max = 50 ;//设置截取长度
$all = mb_strlen($str,$char) ;
$p = ceil($all /$max) ; //计算出要分成几个部分

if(preg_match_all('/(?:<(?!img)[^>]+>)+.*?(?:<///w+>)+/is',$str,$match)){
 
foreach($match[0] as $k=>$v){
   
$sk = str_split($k);
   
$sexa = '';
   
foreach($sk as $sv){
     
$sexa .= $exa[$sv] ;
    }
   
$str = str_replace($v ,$sexa,$str);
  }
}
if(preg_match_all('/<img[^>]*>/is',$str,$mat)){
 
foreach($mat[0] as $k=>$v){
   
$sk = str_split($k);
   
$sexb = '';
   
foreach($sk as $sv){
     
$sexb .= $exb[$sv] ;
    }
   
$str = str_replace($v ,$sexb,$str);
  }
}

if($all < $max ){
 
$out = $str . $gg ;
 
echo $out ;
}
else{
 
$out = '';
 
$i = 0 ;
 
while($i < $p){
   
$ii = 0 ;
   
while(($tp = mb_substr($str,$max * $i + $ii,$max,$char))!=''){
     
if(!in_array(mb_substr($tp,0,1,$char),$exa) && !in_array(mb_substr($tp,0,1,$char),$exb)){
       
$out .= $tp . $gg ;
       
break;
      }
else{
       
$ii++ ;
      }
    }
   
$i++ ;
  }

 
if(!empty($match[0])){
   
arsort($match[0]);
   
   
foreach($match[0] as $k=>$v){
     
$sk = str_split($k);
     
$sexa = '';
     
foreach($sk as $sv){
       
$sexa .= $exa[$sv] ;
      }
     
$out = str_replace($sexa,$v,$out);
    }
   
  }
 
if(!empty($mat[0])){
   
arsort($mat[0]);
   
foreach($mat[0] as $k=>$v){
     
$sk = str_split($k);
     
$sexb = '';
     
foreach($sk as $sv){
       
$sexb .= $exb[$sv] ;
      }
     
$out = str_replace($sexb,$v,$out);
    }
  }
 
echo $out ;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值