『回复列表(11|隐藏机器人聊天)』
function atinfo_add($fromuid,$title,$nr,$url) {
static $i;
$i++;
if ($i > 50) return false;
include __DIR__.'/../user/forbidden.php';
if(!preg_match_all(
"!(@|@)(#|#)?([\\x{4e00}-\\x{9fa5}A-Za-z0-9_\\-]{1,})(\x20|\\[|\xC2\xA0|\r|\n|\x03|\t|,|\\?|\\!|:|;|,|。|?|!|:|;|、|…|$)!u",$nr,$arr,PREG_SET_ORDER)) return false;
if(mb_strlen($nr,'utf-8')>50) $nr=mb_substr($nr,0,50,'utf-8').'……';
$uid=array();
$name=array();
$db=new dbclass('./db/user.db3');
$db=$db->connect();
$cnt=0;
foreach($arr as $d) {
if($d[2]) {
if($uid[$d[3]]) continue;
$x='uid';
} else {
if($name[$d[3]]) continue;
$x='name';
$name[$d[3]]=true;
}
$sql="select uid from user where $x=?";
$rs=$db->prepare($sql);
if(!$rs || !$rs->execute(array($d[3]))) continue;
$id=$rs->fetch(PDO::FETCH_OBJ)->uid;
if($id<1 or $uid[$id]) continue;
$uid[$id]=true;
static $rs2;
userforbidden('atinfo', $fromuid);
if(!$rs2) $rs2=$db->prepare('insert into atinfo(byuid,uid,url,txt,time,`read`,title) value(?,?,?,?,?,?,?)');
if($rs2->execute(array($fromuid,$id,$url,$nr,$_SERVER['REQUEST_TIME'],0,$title))) $cnt++;
}
return $cnt;
}
function lstmsg($txt,$send='有人@你'){
if(preg_match_all("!(@|@)([\\x{4e00}-\\x{9fa5}A-Za-z0-9_\\-]{1,})(\x20| |<|\xC2\xA0|\r|\n|\x03|\t|,|\\?|\\!|:|;|,|。|?|!|:|;|、|…|$)(.*?)!ue",$txt,$rs)){
$s=preg_replace("!(@|@)([\\x{4e00}-\\x{9fa5}A-Za-z0-9_\\-]{1,})(\x20| |<|\xC2\xA0|\r|\n|\x03|\t|,|\\?|\\!|:|;|,|。|?|!|:|;|、|…|$)!ue","'@\\2 \\3'",$txt);
/* 为了捕捉小片段
如果输入的是 @100。。。。,那么将会变成 @100 。。。。,方便使用strpos函数获取字符所在位置
*/
$ary=array();
foreach($rs[2] as $v){
$n=strpos($s,'@'.$v.' ');//得到所在位置
$msgtxt=mb_substr($s,$n,15,'utf-8').'......';//截取片段
if(ctype_digit($v)){//如果是纯数字,则认为是uid
$ary[$v]=$msgtxt;
continue;
}else{//不是纯数字,
$ary[$this->getuid($v)]=$msgtxt;
}
}
foreach ($ary as $key=>$val){//遍历数组,覆盖重复键名(键名就是uid)
$arr[$key]=$val;
}
foreach ($arr as $key=>$val){//发送提醒信息
if($this->isdata($key)){//uid是否存在
$this->lstmsg_add($key,$send.'[br]'.$val);
}
}
}
}