2015-09-16 19 views
1

我正在寫一個BBCode轉換函數,它將純文本轉換爲超鏈接,但我注意到包含格式良好的鏈接的內容也被錯誤地轉換而不是被忽略。下面的代碼塊的輸出給出了兩個超鏈接,一個正確,另一個錯誤。如何避免重新轉換已經超鏈接的文本。我的PHP文本鏈接轉換函數的問題

<?php 
function make_links_clickable($text){ 
    $prepared_str = str_replace('www.','http://www.',$text); 
    $strip_double_str = str_replace('http://http://','http://',$prepared_str); 
    return preg_replace('!(((f|ht)tp(s)?://)[-a-zA-Zа-яА-Я()[email protected]:%_+.~#?&;//=]+)!i', '<a href="$1">$1</a>', $strip_double_str); } 

$strbody = "He was also the Head of Department, Environmental Health 
      in the School of Health Technology, Orji River, 
      Enugu, and member of several professional bodies. <br/> 

      Source: <br/> 
      <a href='http://vanguardngr.com/2015/09'>This is Already hyperlinked</a> <br> 
      http://vanguardngr.com/2015/09/buhari-appoints-abonyi-as-registrar-of-ehorecon/"; 

echo make_links_clickable($strbody); 
?> 

回答

1

字符串包含必須轉換爲html鏈接標記的鏈接。這是一個簡單的PHP函數。

function autolink($string) 
{ 
$content_array = explode(" ", $string); 
$output = ''; 

foreach($content_array as $content) 
{ 
//starts with http:// 
if(substr($content, 0, 7) == "http://") 
$content = '<a href="' . $content . '">' . $content . '</a>'; 

//starts with www. 
if(substr($content, 0, 4) == "www.") 
$content = '<a href="http://' . $content . '">' . $content . '</a>'; 

$output .= " " . $content; 
} 

$output = trim($output); 
return $output; 
} 

調用上面的函數並打印

echo autolink($string); 
+0

現在就測試你的腳本,但它仍然沒有讓它超鏈接已經形成。它扭曲了它使得格式不正確。 str中有兩個鏈接,一個已經格式化爲超鏈接,另一個鏈接文本應該轉換爲超鏈接。 您的函數對純文本起作用,但對於已經超鏈接的文本不起作用。 –

+0

我用代碼更新了答案......我測試了輸出......現在按照它。 如果它給出正確的輸出。那麼請接受答案 –

+0

哪個答案? 我試過兩種方法,但它仍然扭曲已經超鏈接的文本。嘗試使用$ strbody的值運行你的函數。 您會注意到鏈接斷開。只有第二個鏈接有效。 –

0

呼應

$strbody=strip_tags($strbody); 

用strip_tags從字符串中刪除HTML標記之前添加此行。由於我們的文字有<a>標籤,所以strip_tags將其刪除。

+0

感謝羅漢Khude的努力幫助,但我想要的是兩個環節的工作。我希望第一個鏈接未被轉換器觸及,因爲它已經格式良好,而第二個鏈接是純文本鏈接,應該轉換爲超鏈接。 嘗試了你的建議後,我注意到所有的鏈接都被刪除了,這不是我想要的結果。我想要鏈接。 –