完整的需求:
在body内容中,指定字数间隔,插入关键词
这个body一般为HTML代码,中文/数字/字母/符号都算一个字
过滤掉HTML代码,一般p标签内插入,当然,也可能是span这些
不能打乱HTML的结构
仅在搜索蜘蛛抓取的时候处理
我还做了个符号空白跳过,因为这些有点无意义,如果符号也算一个字的话,有时候看起来很怪,当然,你也可以调整,代码如下:
// 打散字符串 function mb_str_split($string) { $length = mb_strlen($string, 'UTF-8'); $result = array(); for ($i = 0; $i < $length; $i++) { $result[] = mb_substr($string, $i, 1, 'UTF-8'); } return $result; } // 判断搜索引擎蜘蛛 function isSearchEngineSpider() { $userAgent = $_SERVER['HTTP_USER_AGENT']; $spiderKeywords = array( 'Googlebot', 'Bingbot', 'Yahoo', 'Baiduspider', 'sogou', 'Yisou', 'Haosou', '360Spider', ); foreach ($spiderKeywords as $keyword) { if (stripos($userAgent, $keyword) !== false) { return true; } } return false; } // 处理HTML代码,$m:间隔字数 function toDoHtml($html,$m,$words='插入指定字符串'){ $newbody = mb_str_split($html); $html = ''; $n = 0;//计算个数 //$m = 10;//每隔M个文字 $isok = 1;//是否标签包裹 $pattern = "/\w/"; $lianxu = 0;//是否连续 $istj = 0;//是否统计 foreach($newbody as $v){ if($v=='<'){ $isok=0; } if($v=='>'){ $isok=1; } if(!in_array($v,['>','<',' ',"\n",":","//","/",".","。",",",",",'"',"...","?","!","?","!",'、']) && !preg_match_all($pattern, $v, $matches) && $isok==1){ $n+=1; $istj = 1; }else{ $istj = 0; } if($n%$m==0 && $n!=0 && $lianxu==0 && $istj==1){ $v.= $words; $lianxu = 1; }else{ $lianxu = 0; } $html.=$v; } return $html; }
版权声明:本文发布于与老涂一起写代码 内容均来源于互联网 如有侵权联系删除
快来评论,快来抢沙发吧~