我创建了一个 PHP 函数,它会自动将 URL 转换为链接,将 Twitter@reply
用户名链接到其 Twitter 个人资料,并将电子邮件地址转换为带有mailto
协议的链接。
这是脚本:
function autolink($a, $b){
$e = "";
$f = array(
'link' => '~(http(s|)\:\/\/(www\.|)((\w+)\.(\w+)(\:[0-9]{2,5}|)\.[a-z]{2,5}|(\w+)(\:[0-9]{2,5}|)\.[a-z]{2,5}))((((\/|)\w+)(\.[a-z]{2,5}|))+)(\?(\w+\=\w+(\&|))+|)~',
'email' => '~\w+\@\w+(\:[0-9]{2,5}|)\.[a-z]{2,5}~',
'twitter' => '~\@([a-zA-Z_0-9]){1,15}~'
);
switch ($b) {
case "link":$e = preg_replace_callback($f['link'], function ($a) {return '<a href="'.$a.'" rel="nofollow" target="_blank">'.$a.'</a>';},$a);break;
case "email":$e = preg_replace_callback($f['email'], function ($a) {return '<a href="mailto:'.$a.'" rel="nofollow" target="_blank">'.$a.'</a>';},$a);break;
case "twitter":$e = preg_replace_callback($f['twitter'], function ($a) {return '<a href="https://twitter.com/#!/'.str_replace('@','',$a).'" rel="nofollow" target="_blank">'.$a.'</a>';},$a);break;
}
return $e;
}
我遇到的唯一问题是,它没有返回链接,而是返回了单词:“Array”。
例如,这个:
autolink("This is my site http://weebuild.biz", "link");
正在返回这个:
这是我的网站数组
当它应该返回这个:
这是我的网站
<a href="http://weebuild.biz" rel="nofollow" target="_blank">http://weebuild.biz</a>
原始脚本在我也写的 JavaSript 中:http: //jsfiddle.net/shawn31313/umgqR/2/
由于我不是 PHP 开发人员,因此 JavaScript 版本具有更多功能。
也许问题是我从 JavaScript 中获取了正则表达式并将其放入 PHP 中。我不确定 PHP 中的正则表达式是否与 JavaScript 不同。
提前致谢。