2011-12-26 59 views
0

這是我的函數:PHP - 的Preg的網址替換字符串從失敗

function makeClickableLinks($s) { 
    return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s); 
} 


$description = $_POST['description']; 

echo makeClickableLinks($description); 

$ _ POST [「說明」]是一個表單文本區域將在後面插入一個MySQL表。

我想讓用戶在這個輸入字段中創建鏈接。當我使用這個功能,用戶輸入的,看起來像這樣的數據:

​​

現在是一個可點擊的鏈接,但鏈接:

http://(myurl).com/google.com 

它認爲該鏈接是一個子目錄。有任何想法嗎?謝謝!

+0

您必須在http://(或https://,或其他任何地方)的鏈接前加上鍊接,否則它會被視爲相對鏈接並附加到當前查看的URL。 – Yaniro 2011-12-26 07:02:04

回答

0

據我所知,您希望組織類似於替換用戶記錄中的引用,以便他們引用您的網站。 Tray this regexp:

<?php 
$str = "Whats up guys. Here's my website! Please check it out!! 
<a href='google.com'>hi</a> and something:)"; 

echo preg_replace("/(<a[^<]* href=['\"])(http:\/\/|https:\/\/)?([^\"]*?)(['\"][^<]*>)/is", "$1mysite.com/$3$4", $str); 
+0

多德謝謝你這一點後調整一下。以下是我使用的內容:echo preg_replace(「/()/是」,「$ 1http:/// $ 3 $ 4」,$ str) – Norse 2011-12-26 21:20:59

0

這是相對鏈接問題。在您的函數makeClickableLinks($ s)中,您需要檢查鏈接是以http還是以https開頭,如果不以http://附加鏈接。找到下面的例子。

function makeClickableLinks($s) { 
    $link = (strpos($s, 'http://') === 0 || strpos($s, 'https://') === 0) ? '' : 'http://'.$s; 
    return $link; 
} 
+0

你能告訴我該怎麼做? – Norse 2011-12-26 07:58:30

+0

@ user1093634我已經更新了我的答案,你可以試試讓我知道嗎? – 2011-12-26 08:06:30

+0

嗨,謝謝。你的腳本不起作用。它產生的鏈接,如:click成爲http://點擊 – Norse 2011-12-26 21:16:21