本节主要内容:
一个php实现的文章内链代码。
说明:本函数可以只替换一个字符。
函数参数:
$replacekeywords --- 替换成什么字符串
$content --- 需要操作的字符串
代码:
<?php
/**
* 文章内链、关键词替换
* by www.
*/
function str_replace()_once($needkeywords, $replacekeywords,$content ) {
$pos = strpos($content, $needkeywords);
if ($pos === false) {
return $content ;
}
return substr_replace($content, $replacekeywords, $pos, strlen($needkeywords));
}
//$_GET['data']:把要替换的关键词ID用","号隔开放在data中
//$_GET['ClassID']:要传入的分类ID,判断要替换的文章的关键词内链
//keywords_set:为要导入的关键词表
if(isset()($_GET['data'])){
$keyrowds=explode()(",",$_GET['data']);
foreach($keyrowds as $val){
//根据ID查询关键词表
$sqlkey="select *from keywords_set where ID=".$val;
$resultkey=@mysql_query()($sqlkey);
$rowskey=mysql_fetch_assoc($resultkey);
//取出关键词及其相关链接路径装入$contents中
$contents[]=array(
'Name'=>$rowskey['Name'],
'LinkUrl'=>$rowskey['LinkUrl']
);
}
//article:文章表,通过$_GET['ClassID']提取所有要替换的文章
$Sql="select* from article where classID='".$_GET['ClassID']."'";
$Result=@mysql_query($Sql);
while($rows=mysql_fetch_assoc($Result))
{
$contentkey=$rows['content'];//文章内容字段
foreach($contents as $value){
//更新关键词库
$sqlupdate="update keywords_set set PostAddtime='".date("Y-m-d",time())."' where Name='".$value['Name']."'";
$resultupdate=@mysql_query($sqlupdate);//执行更新SQL语句
//组合成内链
$contentkeys="".$value['Name']."";
//判断如果为导入内链则替换,否则去掉替换
if($_GET['flg']=="insert"){
$contentkey=str_replace_once($value['Name'],$contentkeys,$contentkey);
}
if($_GET['flg']=="out"){
$contentkey=str_replace($contentkeys,$value['Name'],$contentkey);
}
}
//更新文章内链
$sqlupdate="update article set content='".$contentkey."' where articleID=".$rows['articleID'];
$resultupdate=@mysql_query($sqlupdate);
}
}
本节主要内容:
php关键字替换类,md5加密后替换,防止重复替换。
1,php关键字替换类
<?php
/**
* 关键字 替换类 替换(随机位置) 且指定数量的关键词
先对关键字 md5加密(若关键字之间有重字部分,md5加密,可防止重复替换),替换标志/&--&/
/*---*/
/* 替换成/*md5*/
/* 最后用 关键词 替换掉 **形式
* by www.
*/
class KeyReplace{
public $KeyArray; //关键字
public $HtmlString; //文字内容
public $ArrayCount; //关键字 的 个数
/*
初始化:
$keyArray 关键字 数组
$String 检索字域,文字
*/
function KeyReplace($KeyArray,$String){
$this->KeyArray=$KeyArray;
$this->HtmlString=$String;
$this->ArrayCount=count($KeyArray);
}
/*
关键字 按长度排序
*/
function KeyOrderBy(){
for($i=0;$i<$this->ArrayCount-1;$i++){
for($j=$i+1;$j<$this->ArrayCount;$j++){
$TempArray=array();
if(strlen($this->KeyArray[$i]["Key"])<strlen($this->KeyArray[$j]["Key"])){
$TempArray=$this->KeyArray[$i];
$this->KeyArray[$i]=$this->KeyArray[$j];
$this->KeyArray[$j]=$TempArray;
}
}
}
// 中国 呵呵 国 中
}
function Replaces(){
for($i=0;$i<$this->ArrayCount;$i++){
if((integer)$this->KeyArray[$i]['ReplaceNumber'] != 0 ){
str_replace()($this->KeyArray[$i]["Key"],"/*".md5($this->KeyArray[$i]["Key"])."*/",$this->HtmlString,$num);//$num查询到的数量
if((integer)$this->KeyArray[$i]['ReplaceNumber']>$num) {//当关键词 需要替换的数量 大于 包含的数量时,替换全部
$this->KeyArray[$i]['ReplaceNumber']=$num;
$this->HtmlString=str_replace($this->KeyArray[$i]["Key"],"/*".md5($this->KeyArray[$i]["Key"])."*/",$this->HtmlString);
continue;
}
//当关键词 需要替换的数量 不大于 包含的数量时,使用 KeyStrpos($i);方法替换
$ListNumber=array();
$ListNumber=$this->KeyStrpos($i);//$i: 表示第$i个关键词($i从0开始)
$RegArray=array();
if(count($ListNumber)<1) continue;//不存在 关键词
$n=0;
while($n<(integer)$this->KeyArray[$i]["ReplaceNumber"]){
$g=0;
$x=rand(0,count($ListNumber)-1);//随机数
for($xcn=0;$xcn<=$n;$xcn++){
if($RegArray[$xcn]==$ListNumber[$x]){
$g=1;
}
}
if($g==0){
$RegArray[$n]=$ListNumber[$x];
$n++;
}
}
for($c=0;$c<count($RegArray)-1;$c++)
{//关键词所在位置 递增排序
for($jx=$c+1;$jx<count($RegArray);$jx++){
if($RegArray[$c]>$RegArray[$jx]){
$TempArray=$RegArray[$c];
$RegArray[$c]=$RegArray[$jx];
$RegArray[$jx]=$TempArray;
}
}
}
for($c=0;$c<count($RegArray);$c++){
$this->StrposKey($this->KeyArray[$i]["Key"],$RegArray[$c],$c);// 逐位(索引位) 替换截取到的关键字
}
$this->HtmlString=str_replace("/&".md5($this->KeyArray[$i]["Key"])."&/",$this->KeyArray[$i]["Key"],$this->HtmlString);
}else{
$this->HtmlString=str_replace($this->KeyArray[$i]["Key"],"/*".md5($this->KeyArray[$i]["Key"])."*/",$this->HtmlString);
}
}
for($i=0;$i<$this->ArrayCount;$i++){
$this->HtmlString=str_replace("/*".md5($this->KeyArray[$i]["Key"])."*/",$this->KeyArray[$i]["Href"],$this->HtmlString);
}
}
function StrposKey($Key,$StrNumber,$n){//在字符串里 截取关键字 并替换,从$StrNumber这个位置开始(包含$StrNumber这个位置)替换到$n(包含$n这个位置)这个位置
$this->HtmlString=substr_replace($this->HtmlString, "/*".md5($Key)."*/", $StrNumber, 36);
}
/* 递归 查找 关键词 所在的位置 存于数组中 */
function KeyStrpos($KeyId){
$StrListArray=array();
$StrNumberss=strpos($this->HtmlString, $this->KeyArray[$KeyId]["Key"]);
$xf=0;
while(!($StrNumberss===false)){
$StrListArray[$xf]=$StrNumberss;
$this->HtmlString=substr_replace($this->HtmlString,"/&".md5($this->KeyArray[$KeyId]["Key"])."&/",$StrNumberss, strlen($this->KeyArray[$KeyId]["Key"]));
$StrNumberss=strpos($this->HtmlString, $this->KeyArray[$KeyId]["Key"]);
$xf++;
}
return $StrListArray;
}
}
?>
2,php关键字替换类的调用示例
<?php
$KeyArray1=Array(
0=>array("Key"=>"中国","Href"=>"<a href='/blog_article/中国/index.html'>中国</a>","ReplaceNumber"=>1),
1=>array("Key"=>"中","Href"=>"<a href='/blog_article/中/index.html'>中</a>","ReplaceNumber"=>1),
2=>array("Key"=>"国","Href"=>"<a href='/blog_article/国/index.html'>国</a>","ReplaceNumber"=>1),
3=>array("Key"=>"呵呵","Href"=>"<a href='/blog_article/呵呵/index.html'>呵呵</a>","ReplaceNumber"=>0)
);
$KeyArray=Array(
0=>array("Key"=>"中国","Href"=>"<a href='/blog_article/中国/index.html'>中国</a>","ReplaceNumber"=>1),//只替换一个‘中国’
1=>array("Key"=>"人","Href"=>"<a href='/blog_article/人/index.html'>人</a>","ReplaceNumber"=>1),
2=>array("Key"=>"我","Href"=>"<a href='/blog_article/我/index.html'>我</a>","ReplaceNumber"=>1),
3=>array("Key"=>"呵呵","Href"=>"<a href='/blog_article/呵呵/index.html'>呵呵</a>","ReplaceNumber"=>0)//全部替换
);
$str = "呵呵!中国人民站起来了,中国,我的祖国,呵呵!中国是我们的,中国也是你们的,中国人民严厉谴责他们,我们中国人就是OK12呵呵!";
$a = new KeyReplace($KeyArray,$str);
$a->KeyOrderBy();
$a->Replaces();
//header("content-type: text/html; charset=utf-8");//设置页面编码
echo $a->HtmlString;
?>
本节主要内容:
一个php实现的内容关键字替换的函数。
例子:
<?php
/**
* 内容关键字替换
* by www.
*/
$arr=array(
"鞋子"=>"<a href='/blog_article/index.html'>鞋子</a>",
"袜子"=>"<a href='/blog_article/wazi.html'>袜子</a>",
"裙子"=>"<a href='/blog_article/qunzi.html'>裙子</a>",
"连衣裙"=>"<a href='/blog_article/连衣裙.html'>连衣裙</a>",
);
$str="鞋子 袜子 鞋子 袜子 鞋子 袜子 鞋子 袜子 裙子 连衣裙";
$str=replacelink($str,$arr,3);
echo $str;
public function replacelink($str,$arr,$maxcount=3000){
//匹配出图片
preg_match_all("/(<img[^>]*>)/iUs",$str,$imgs);
preg_match_all("/(<a.*>.*<\/a>)/iUs",$str,$links);
//替换图片和链接
if($links[1]){
foreach($links[1] as $k=>$v){
$str=str_replace()($v,"@links_$k",$str);
}
}
if($imgs[1]){
foreach($imgs[1] as $k=>$v){
$str=str_replace($v,"@imgs_$k",$str);
}
}
//匹配结束
$str=strtr($str,$arr);
preg_match_all("/(<a.*>.*<\/a>)/iUs",$str,$a);
$a=$a[1];
$c=array_count_values($a);
if($c){
$kk=0;
foreach($c as $k=>$v){
if($v){
if($kk<$maxcount){
$v=$v-1;
}
$str=preg_replace("/".$this->replace_quote($k)."/i",str_replace("#","",strip_tags()($k)),$str,$v);
}
$kk++;
}
}
//还原图片跟链接
if($links[1]){
foreach($links[1] as $k=>$v){
$str=str_replace("@links_$k",$v,$str);
}
}
if($imgs[1]){
foreach($imgs[1] as $k=>$v){
$str=str_replace("@imgs_$k",$v,$str);
}
}
return $str;
}
function replace_quote($str){
$str=preg_quote($str);
$str=str_replace("/","\/",$str);
return $str;
}