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