最近大伙都比较热衷于玩腾讯微博,喜欢新鲜事物的我(喵了个咪)也不例外,不过玩的同时,喜欢想这个是怎么实现的那个是怎么实现的,所以有了这篇文章。

大家都知道,一段文字:
大家说@deeka和@admin是不是#牛人#, 个人博客http://www.hdj.me?


经过广播之后,会变成大概这个样子:
大家说<a href='http://www.yourdomain.com/deeka'>大笨</a>和<a href='http://www.yourdomain.com/admin'>超级管理员</a>是不是<a href='http://www.yourdomain.com/t/牛人'>#牛人#</a>, 个人博客<a href='http://www.yourdomain.com/url/4f6beca52ee37c537d1fa85bc374679f' title='http://www.hdj.me'>http://www.yourdomain.com/url/4f6beca52ee37c537d1fa85bc374679f</a>。


但这整个过程是怎么实现的呢?

正则替换!对了,就是利用了正则替换。

但是简单的正则替换还是不能完全完成这一过程,需要更复杂一些的正则\e修正模式支持。

花了一点点时间写了一个演示:


<?php
$accounts = array(
  'admin'=>'超级管理员',
  'deeka'=>'大笨',
);

function showaccount($s=''){
  global $accounts;
  if($accounts[$s])
    return "<a href='http://www.yourdomain.com/{$s}'>{$accounts[$s]}</a>";
  else
    return $s;
}

function showurl($s=''){
  $md5 = md5($s);
  $url = "http://www.yourdomain.com/url/{$md5}";
  return "<a href='{$url}' title='{$s}'>{$url}</a>";
}

function showtopic($s=''){
  return "<a href='http://www.yourdomain.com/t/{$s}'>#{$s}#</a>";
}

$s = "大家说@deeka和@admin是不是#牛人#, 个人博客http://www.hdj.me。";
$p = array(
  "/(http\s?:\/\/[\w+\.\-\_]+)/e",
  "/@(\w+)/e",
  "/#(.*?)#/e",
);

$r = array(
  "showurl('\\1')",
  "showaccount('\\1')",
  "showtopic('\\1')",
);
$s = preg_replace($p, $r, $s);
var_dump($s);
?>
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]