我正在编写一些代码来将纯文本链接转换为PHP中的超文本链接。我正在使用正则表达式(我几乎什么都不知道)并且我遇到了一些问题:
这是我写的代码:
function text2link($text)
{
$text = preg_replace
(
"/(ftp\.|www\.|http:\/\/|https:\/\/|)(.*)(\.)(com|net|co\.uk)/i",
"<a href='http://$2$3$4' target='_blank'>$1$2$3$4</a>",
$text
);
return $text;
}
此代码将转换以下“超链接样式”:
http://www.google.com
www.google.com
google.com
然而,等等,链接被强制为HTTP。无论你键入什么,表达式都会强制HTTP。是否可以有条件地包括必要的协议?例如:
"<a href='[SOME IF-CONDITION GOES HERE TO DECIDE WHAT PROTOCOL TO USE]$2$3$4' target='_blank'>$1$2$3$4</a>",
这种情况将类似于:
if $1 == "http, else if $1 == "https", else if $1 == "ftp",
等等。
此外,我意识到我没有考虑到任何接近足够扩展的地方,现在这只是测试代码。
编辑:我应该注意到,我不是在寻找“傻瓜式”,需要200行的不可破解的解决方案。我不介意一些不起眼的域名是否被提起。我只想要检测最常见的域和URL并将其转换为可点击的链接。
答案 0 :(得分:0)
您无需调整正则表达式:
function text2link($text, $protocol="http://")
{
$text = preg_replace
(
"/(ftp\.|www\.|http:\/\/|https:\/\/|)(.*)(\.)(com|net|co\.uk)/i",
"<a href='$protocol$2$3$4' target='_blank'>$1$2$3$4</a>",
$text
);
return $text;
}
您可以将可选协议作为第二个参数传入,如果不是,则默认为http://
。