已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP > 讨论/求助

标题: 又更新了@信息功能

作者: @Ta

时间: 2013-08-30

点击: 3703

@老虎会游泳    说说你过滤重复和截取小片段的方法呗我是foreach过滤重复,strpos获取所在位置,substr截取     

[隐藏样式|查看源码]


『回复列表(11|隐藏机器人聊天)』

1. preg_match()
(/@Ta/2013-08-30 22:13//)

2. @胜永,我用正则表达式的回调函数(preg_replace_callback)获取数据,用函数中static(静态)变量避免重复(若相同名称已在static $user;数组中出现,则直接return)
(/@Ta/2013-08-31 08:03//)

3. @老虎会游泳,那截取小片段呢
(/@Ta/2013-08-31 08:23//)

4. preg_match
(/@Ta/2013-08-31 09:22//)

5. @胜永,什么截取小片段?
(/@Ta/2013-08-31 11:39//)

6. @老虎会游泳,  老虎会游泳在帖子“又更新了@信息功能”的回复中@:“@胜永,什么截取小片段?”     后面的这个啊   :“@胜永,什么截取小片段?”  
(/@Ta/2013-08-31 17:17//)

7. @胜永
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;
}
(/@Ta/2013-09-01 06:08//)

8. @老虎会游泳,这个源码看到过了,没有看到你用preg_replace_callback啊
(/@Ta/2013-09-01 13:37//)

9. @老虎会游泳,我 的是这样的
function lstmsg($txt,$send='有人@你'){
          
          if(preg_match_all("!(@|@)([\\x{4e00}-\\x{9fa5}A-Za-z0-9_\\-]{1,})(\x20|&nbsp;|<|\xC2\xA0|\r|\n|\x03|\t|,|\\?|\\!|:|;|,|。|?|!|:|;|、|…|$)(.*?)!ue",$txt,$rs)){

            $s=preg_replace("!(@|@)([\\x{4e00}-\\x{9fa5}A-Za-z0-9_\\-]{1,})(\x20|&nbsp;|<|\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); 
             
             }

          }
          
          
        }

    }
(/@Ta/2013-09-01 23:07//)

10. @胜永,我乱说的~~.
(/@Ta/2013-09-02 07:19//)

11. @老虎会游泳,.........................
(/@Ta/2013-09-02 11:56//)

回复需要登录

7月14日 04:33 星期一

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1