2013-06-04 79 views
0

我下面的腳本,超鏈接貼在我的網站的任何鏈接:自動超鏈接添加額外的HTTP://到開頭?

$text = trim($text); 
    while ($text != stripslashes($text)) { $text = stripslashes($text); }  
    $text = strip_tags($text,"<b><i><u>"); 
    $text = preg_replace("/(?<!http:\/\/)www\./","http://www.",$text); 
    $text = preg_replace("/((http|ftp)+(s)?:\/\/[^<>\s]+)/i", "<a href=\"\\0\" target=\"_new\">\\0</a>",$text); 

然而,出於某種原因,如果我添加了一個鏈接https://www.test.com它結束了顯示這樣的 - https://http://www.test.com - 我究竟做錯了什麼?我怎樣才能使它與https鏈接一起工作呢?它可以正常使用http鏈接。謝謝! :-)

+0

可能重複[需要一個很好的正則表達式來將URL轉換爲鏈接,但保留現有的鏈接](http://stackoverflow.com/questions/287144/need-a-good-regex-to-convert-urls-to -links-but-leave-existing-links-alone) – hek2mgl

回答

1

您在這裏的後視圖,(?<!http:\/\/)www\.只匹配http://,但您的測試輸入(即失敗)是https://

您可以添加與當前一個指定替代https://版本太多鏈第二回顧後:

(?<!http:\/\/)(?<!https:\/\/)www\. 

這將使您的全線樣子:

$text = preg_replace("/(?<!http:\/\/)(?<!https:\/\/)www\./","http://www.",$text); 

最後我檢查,PHP不支持可變長度lookbehinds,所以可能熟悉的東西(如http[s]?://)在這裏不起作用 - 因此是第二種模式。

+0

謝謝!非常努力! :d – EdzJohnson