由于是模仿新浪微博做的树洞代发模板UI
所以在主页直接用 foreach 把树洞的微博输出来了
但是有时候有些人发送的微博@有其他人或者有http连接、热门话题等
如何在页面输出之前正则替换掉这些字符,使它们成为超链接呢?
以前因为还没怎么接触过正则表达式,所以也懒得去想、去做、
今天刚好在论坛看到一位朋友提出了这个问题
然后根据他给的一些想法和思路。。。整理了一些资料出来,希望对大家有用
——————————————————————分割线———————————————————————–
①将文本中@后面的字符转换为超链接
Example:@example ,我真的好喜欢你 (貌似树洞挺常出现这样的字眼的,拿来做example)
正则替换后变成@example ,我真的好喜欢你
实现代码如下:
1
2
3
4
5
| <?php
$t="@example ,我真的好喜欢你";
$t = preg_replace( "/ *@([\x{4e00}-\x{9fa5}A-Za-z0-9_-]*) ?/u", " <a href=\"http://weibo.com/n/\\1\" target=\"_blank\">@\\1</a> ", $t);
echo $t;
?>
|
②将文本中#example# (热门话题)替换为超链接
Example:#韩寒VS方舟子#
正则替换后变成 #韩寒VS方舟子#
实现代码如下:
1
2
3
4
5
| <?php
$k="#韩寒VS方舟子#";
$k = preg_replace( "/ *#([\x{4e00}-\x{9fa5}A-Za-z0-9_-]*) ?/u", " <a href=\"http://weibo.com/k/\\1\" target=\"_blank\">#\\1</a> ", $k);
echo $k;
?>
|
③将文本中http:// 开头的URL正则替换为超链接
这个刚好在常用的正则表达式函数库里面有实例,我就直接贴上来咯
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| <?php
function url2html($text)
{
//匹配一个URL,直到出现空白为止
preg_match_all("/http:\/\/?[^\s]+/i", $text, $links);
//设置页面显示URL地址的长度
$max_size = 40;
foreach($links[0] as $link_url)
{
//计算URL的长度。如果超过$max_size的设置,则缩短。
$len = strlen($link_url);
if($len > $max_size)
{
$link_text = substr($link_url, 0, $max_size)."...";
} else {
$link_text = $link_url;
}
//生成HTML文字
$text = str_replace($link_url,"<a href='$link_url'>$link_text</a>",$text);
}
return $text;
}
//运行实例
$str = "这是一个包含多个URL链接地址的多行文字。欢迎访问http://belinlove.sinaapp.com";
print url2html($str);
/*输出结果
这是一个包含多个URL链接地址的多行文字。欢迎访问
<a href='http://belinlove.sinaapp.com'>
http://belinlove.sinaapp.com</a>
*/
?>
|
上面总结的一些正则表达式替换实例,希望对奋战在SAE和新浪API的朋友有小小帮助