完整的需求:
在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;
}版权声明:本文发布于与老涂一起写代码 内容均来源于互联网 如有侵权联系删除

快来评论,快来抢沙发吧~