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); } } } }