我有一个包含一些链接的字符串。我需要将它们转换为可点击的链接,但问题是其中很多不是以 http 或 www 开头的。我怎样才能转换它们而不会无意中影响字符串的其余部分?
示例字符串: http: //pastebin.com/bMe9pGbv
我有一个包含一些链接的字符串。我需要将它们转换为可点击的链接,但问题是其中很多不是以 http 或 www 开头的。我怎样才能转换它们而不会无意中影响字符串的其余部分?
示例字符串: http: //pastebin.com/bMe9pGbv
首先,我们需要将所有链接与文本隔离开来。我们假设链接没有空格,所以我们使用空格作为分隔符创建一个带爆炸的数组:
$rows = explode(' ', $text);
然后,从每一行中,我们识别链接,添加http://
(如果缺少)并添加<a>
标签:
foreach ($rows AS $key => $row) {
if (preg_match("@^[^\.\n]+\.[^ \n]+$@", $row)) {
if (!preg_match('@^http://@', $row)) {
$row = 'http://' . $row;
}
$rows[$key] = '<a href="'.$row.'">'.$row.'</a>';
}
}
最后,我们重建文本,使用implode和 thespace
作为分隔符:
$text = implode(' ', $rows);
这是我检测实际 URL(从方案开始)并将其替换为<a>
.
<?php
echo preg_replace(
"/(http:\/\/|ftp:\/\/|https:\/\/)([^\s,]*)/i",
"<a href=\"$1$2\">$1$2</a>",
$input
);
检测不以方案开头的任意可点击链接需要更复杂的正则表达式和更多的猜测。