如何在PHP页面中将文本URL转换为可点击的链接?

3
我相信这是一个非常简单和显而易见的答案,但我的大脑已经崩溃了,我似乎无法理解它。我有一个PHP网站,允许用户将信息发布到MySQL的文本字段中。所有的帖子都可以在线查看。当处于发布/编辑模式时,该字段是HTML表单中的文本区域,在读取模式下是静态文本。用户想要能够在他们的帖子中包含URL,并将其显示为可点击的链接,而无需在字段中包含HTML(我也不希望他们能够这样做-风险太大)。因此,这是需要在数据显示时完成的事情,而不是在保存到数据库时插入HTML。
显示代码非常简单:
$query = "SELECT * FROM meetings where id=".$_GET['id'];
$result = mysqli_query($dbc, $query) or die('Error querying database');
$rows = mysqli_fetch_array($result);

echo "<p><div id=\"articleBody\">". $rows['body']. "</div></p>";

是否有一种函数可以放在 $rows['body'] 的周围,以显示以 http 开头的任何内容作为可点击链接?请注意,该变量实际上可能包含或不包含 URL。


5
哦天啊,你实际上是将 $_GET 变量直接插入到查询中吗?应该考虑转义它或使用预处理语句。 - barfoon
例如: yourwebsite.com/article.php?id=''%20OR%201%3D1 ..或者更糟糕的情况下.. - jerluc
@barfoon - 不,我在实际代码中已经转义了它;我遇到了FTP问题,无法访问它并将其复制/粘贴到此帖子中,所以我有点懒,只给出了基本信息,而不是重新输入每一位。 - EmmyS
2个回答

6
使用 preg_replace 来完成此操作:
$html = preg_replace('"\b(http://\S+)"', '<a href="$1">$1</a>', $rows['body'])
echo "<p><div id=\"articleBody\">".$html."</div></p>";

谢谢!出于某种原因,我一直认为有一个本地的PHP函数可以做到这一点。不过这正是我需要的。 - EmmyS

0
$out = $rows['body'];

echo "<p><div id='articleBody'>";

if(substr($out,0,4)=='http') { echo "<a href='#'>".$out."</a>"; }
else { echo $out; } 

echo "</div></p>";

这会不会使得链接文本成为正文字段的整个值?这不是我所需要的。该字段可能包含多个段落的文本,其中可能包括链接,也可能不包括。 - EmmyS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接