即使我投了兩份,一般建議:分而治之。
在你輸入的字符串,所有的「網址」不包含任何空格。所以,你可以把字符串轉換爲不包含空格的部分:
$chunks = explode(' ', $str);
我們知道,每一個部分,現在是一個潛在的鏈接您可以創建自己的功能,即能有這麼:
/**
* @return bool
*/
function is_text_link($str)
{
# do whatever you need to do here to tell whether something is
# a link in your domain or not.
# for example, taken the links you have in your question:
$links = array(
'website.tld',
'anotherwebsite.tld/longeraddress',
'http://maybeanotheradress.tld/file.ext'
);
return in_array($str, $links);
}
in_array
只是一個例子,您可能正在尋找基於正則表達式的模式匹配。您可以稍後進行編輯以適應您的需求,我將此作爲練習。
正如你現在可以說什麼環節,什麼不可以,唯一剩下的問題是如何創建的BBCode了鏈接,這是一個相當簡單的字符串操作:
if (is_link($chunk))
{
$chunk = sprintf('[url=%s]LINK[/url]', $chunk);
}
所以從技術上說,所有問題已經解決,這需要被放在一起:
:
function bbcode_links($str)
{
$chunks = explode(' ', $str);
foreach ($chunks as &$chunk)
{
if (is_text_link($chunk))
{
$chunk = sprintf('[url=%s]LINK[/url]', $chunk);
}
}
return implode(' ', $chunks);
}
這已經與有關您的示例字符串(Demo)運行210
輸出:
text text [url=website.tld]LINK[/url] text text [url=anotherwebsite.tld/longeraddress]LINK[/url] text [url=http://maybeanotheradress.tld/file.ext]LINK[/url]
然後你只需要調整is_link
功能fullfill您的需求。玩的開心!
您如何區分網站地址和文字? – 2012-02-25 15:08:45
首先我要說的是用分隔符分割字符串:「:」,「 - 」和空格鍵 – 2012-02-25 15:15:33
@AdrianK。 「hi.com白衣我」(寫得不好的短語的例子)。根據你當前的規則,'hi.com'應該被解釋爲一個URL。我建議強制URL以協議爲前綴。的[查找網頁鏈接,並通過自定義函數運行] – 2012-02-25 15:20:13