与老涂一起写代码

在HTML内容中指定间隔字数插入字符串

admin 266 ℃ 0 条
在HTML内容中指定间隔字数插入字符串

完整的需求:

  1. 在body内容中,指定字数间隔,插入关键词

  2. 这个body一般为HTML代码,中文/数字/字母/符号都算一个字

  3. 过滤掉HTML代码,一般p标签内插入,当然,也可能是span这些

  4. 不能打乱HTML的结构

  5. 仅在搜索蜘蛛抓取的时候处理


我还做了个符号空白跳过,因为这些有点无意义,如果符号也算一个字的话,有时候看起来很怪,当然,你也可以调整,代码如下:

// 打散字符串
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;
}


发表评论 (已有0条评论)

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