文章中如何自动合理的插入广告代码?==高手进!!急急急!!! 本帖最后由 moths 于 2011-02-16 10:31:22 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 中文 英文 数字 混合判断还要判断html标签,还要注意标签嵌套的问题,有点难度要代码 40分 少了点 去看下带HTML标记的字符串截取,原理一样 以下代码 测试通过<?PHPheader('Content-Type: text/html; charset=gbk');$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">这是一张图⑩片②。希望大家能给予帮助,谢谢!eof;$exa = array('㈠','㈡','㈢','㈣','㈤','㈥','㈦','㈧','㈨','㈩');$exb = array('①','②','③','④','⑤','⑥','⑦','⑧','⑨','⑩');$str = str_replace($exa,'',$str);$str = str_replace($exb,'',$str);$gg = '<script src="xxxx"></script>'; //要加的广告字符$max = 50 ;//设置截取长度$all = mb_strlen($str,'gbk') ;$p = ceil($all /$max) ; //计算出要分成几个部分if(preg_match_all('/(?:<(?!img)[^>]+>)+.*?(?:<\/\w+>)+/is',$str,$match)){ foreach($match[0] as $k=>$v){ $str = str_replace($v ,$exa[$k],$str); }}if(preg_match_all('/<img[^>]*>/is',$str,$mat)){ foreach($mat[0] as $k=>$v){ $str = str_replace($v ,$exb[$k],$str); }}if($all < $max ){ $out = $str . $gg ; echo $out ;}else{ $out = ''; $i = 0 ; while($i < $p){ if(($tp = mb_substr($str,$max * $i,$max,'gbk'))!=''){ $out .= $tp . $gg ; }else{ break ; } $i++ ; } if(!empty($match[0])){ foreach($match[0] as $k=>$v){ $out = str_replace($exa[$k],$v,$out); } } if(!empty($mat[0])){ foreach($mat[0] as $k=>$v){ $out = str_replace($exb[$k],$v,$out); } } echo $out ;}?> 这段代码的特点是:兼容中文英文数字bg2312/gbk/编码,修改参数mb_strlen(,,,'utf-8'),mb_substr(,,,'utf-8')可支持utf-8编码考虑了html代码的嵌套和对称性以及<img>的不对称性。不会出现乱码但有一个缺陷,就是html代码出现的次数须小于10,如果需要支持大于10的情况,需要修改代码。 以下代码 测试通过,无html标签个数限制。代码有些臃肿,好多重复的功能没有做成函数,这个你自己改一下吧。$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 ;} linux vhost的开启 求救,我自己的php程序写入中文乱码,phpmyadmin写入中文正常,我那里错了 谁能跟我解释下file_open_contents(),curl,snoopy三个的本质啊? 一个简单的PHP问题 显示不到中文字符 PHP查询结果 标题的参数不显示,可能是调用出错了 提交中文的时候出问题,请帮忙 substr()的问题,在线等 对php的一点想法. 请教一个php的ftp上传问题 谁给发个小偷程序,学习一下正则表达式 php中的sql语句where条件中假如有变量应该怎么办?
还要判断html标签,还要注意标签嵌套的问题,
有点难度
要代码 40分 少了点
<?PHP
header('Content-Type: text/html; charset=gbk');$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">这是一张图⑩片②。希望大家能给予帮助,谢谢!
eof;$exa = array('㈠','㈡','㈢','㈣','㈤','㈥','㈦','㈧','㈨','㈩');
$exb = array('①','②','③','④','⑤','⑥','⑦','⑧','⑨','⑩');
$str = str_replace($exa,'',$str);
$str = str_replace($exb,'',$str);$gg = '<script src="xxxx"></script>'; //要加的广告字符
$max = 50 ;//设置截取长度
$all = mb_strlen($str,'gbk') ;
$p = ceil($all /$max) ; //计算出要分成几个部分if(preg_match_all('/(?:<(?!img)[^>]+>)+.*?(?:<\/\w+>)+/is',$str,$match)){
foreach($match[0] as $k=>$v){
$str = str_replace($v ,$exa[$k],$str);
}
}
if(preg_match_all('/<img[^>]*>/is',$str,$mat)){
foreach($mat[0] as $k=>$v){
$str = str_replace($v ,$exb[$k],$str);
}
}if($all < $max ){
$out = $str . $gg ;
echo $out ;
}else{
$out = '';
$i = 0 ;
while($i < $p){
if(($tp = mb_substr($str,$max * $i,$max,'gbk'))!=''){
$out .= $tp . $gg ;
}else{
break ;
}
$i++ ;
} if(!empty($match[0])){
foreach($match[0] as $k=>$v){
$out = str_replace($exa[$k],$v,$out);
}
}
if(!empty($mat[0])){
foreach($mat[0] as $k=>$v){
$out = str_replace($exb[$k],$v,$out);
}
}
echo $out ;
}?>
代码有些臃肿,好多重复的功能没有做成函数,这个你自己改一下吧。$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 ;
}