可能重复:
用HTML链接替换文本中的URL
我正在编写一些代码,用PHP将纯文本链接转换为超文本链接。我正在使用一个正则表达式(我对它几乎一无所知),我遇到了一些问题:
- 我不知道如何在表达式中有条件地包含/排除项
- 我不知道如何在表达式中包含URL参数
- 我对RegEx了解不多
这是我写的代码:
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,并将其转换为可点击的链接。
您不需要调整正则表达式:
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://
。