2011-01-14 73 views
3

我確定這是一個非常簡單明顯的答案,但我的大腦被炸,而我似乎無法得到它。我有一個PHP網站,允許用戶將信息發佈到mySQL中的文本字段。這些帖子都可以在線查看。該字段在post/edit模式下是HTML表單中的textarea,而在讀取模式下是靜態文本。用戶希望能夠在他們的帖子中包含一個URL並將其顯示爲可點擊的鏈接,而不必在該字段中包含HTML(我不希望他們能夠做任何事情 - 太冒險了)。這是在顯示數據時需要完成的事情,而不是在保存到數據庫時將html插入到文本中。如何將文本URL轉換爲PHP頁面中的可點擊鏈接?

要顯示的代碼非常簡單:

$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>"; 

是否有一個功能我可以把周圍$行[「身體」],將顯示任何以http開始作爲一個可點擊的鏈接?請記住,該變量可能實際上包含或不包含網址。

+5

哦善良 - 你實際插入$ _GET變量直接進入這樣的查詢?應該考慮轉義或使用預先準備的語句。 – barfoon 2011-01-14 03:32:02

+0

如.. yourwebsite.com/article.php?id=''%20OR%201%3D1 ..或更糟.. – jerluc 2011-01-14 03:57:46

+0

@barfoon - 不,我確實已經逃過了現場代碼;我有FTP問題,無法將它複製/粘貼到這篇文章中,所以我很懶惰,只是給出了基礎知識,而不是重新輸入每一點。 – EmmyS 2011-01-14 04:09:41

回答

6

使用preg_replace做到這一點:

$html = preg_replace('"\b(http://\S+)"', '<a href="$1">$1</a>', $rows['body']) 
echo "<p><div id=\"articleBody\">".$html."</div></p>"; 
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>"; 
相關問題