2009-09-02 25 views
2

我想在這個劇本我正在幫...請從文件的文本自動鏈接:如內部維基百科 - PHP

我希望我的網站本身就是一個百科...就拿我有一個PHP網站...我每天發佈文章。

假設我公佈詹娜和邁克爾·傑克遜2條分別

現在我保存爲文本/ XML /數據庫中的文本和鏈接

例如

jenna bush, http://www.domain.com/jenna.html  
michael jackson, http://www.domain.com/michael.html 

或需要像任何這方面

<xml> 
<item> 
<text>jenna bush</text> 
<link>http://www.domain.com/jenna.html</link> 
</item> 
... etc 
</xml> 

現在我想要的是PHP腳本應該aut omatically轉換任何詹娜或任何邁克爾·傑克遜鏈接到所有在我的網站各自的鏈接...

任何幫助深表感謝......

回答

1

我定製它,這裏是大家有興趣的

function tags_autolink($text) 
{ 

$text = " $text "; 
$query_tags_autolink = "SELECT tag from tags"; 
$rs_tags_autolink = mysql_query($query_tags_autolink) or print "error getting tags"; 

while($row_tags_autolink = mysql_fetch_array($rs_tags_autolink)) 
{ 
$tag_name = trim($row_tags_autolink['tag']); 
$tag_url = "http://www.domain.com/tag/".createLink(trim(htmlentities($tag_name)))."/"; 
$text = preg_replace("|(?!<[^<>]*?)(?<![?./&])\b($tag_name)\b(?!:)(?![^<>]*?>)|imsU","<a href=\"$tag_url\">$1</a>" , $text); 
} 

return trim($text); 
} 

的創建鏈接功能只是使的「ABCD是KK」喜歡「ABCD-是-KK」的一個標籤頁面的結尾的字符串;)

喝彩!

1

假設包含這些單詞的文字是在數據庫中的最佳方式來實現這樣的事情正在使用str_replace http://ie2.php.net/manual/en/function.str-replace.php

就在文本提交給數據庫之前,你運行一個函數,它會查找某些短語並用其他短語替換它們。

另外,也許更好的方法是與mediawiki(維基百科運行的軟件使用的)相同的方法,例如,每當您想要在其周圍放置[[]]的mediawiki中的其他文章創建鏈接時[[邁克爾傑克遜]]。 這樣你就可以更好地控制什麼變成了一個鏈接。例如:如果你有一篇關於音樂家王子的文章,還有一篇關於查爾斯王子的文章,並且你想鏈接到查爾斯王子,第一種方法可能首先發現王子並且鏈接到他,但是如果你使用mediawiki方法,你會寫[[Prince Charles]],它會知道要尋找什麼。 要做到這一點,我建議的preg_match http://www.php.net/manual/en/function.preg-match.php

這可能是值得擁有看看鏈接到MediaWiki如何做同樣的事情,你可以免費下載,它是寫在PHP

+0

謝謝史蒂芬,但這並不符合我的目的......那麼已經發表的3000篇文章......還有......未來的話會怎麼樣......我需要的是就像一個函數,它可能會從文本或xml文件中獲取單詞數組......匹配並將其替換爲文本中的鏈接文本,在頁面加載時動態使用preg匹配...因此,當有新條目時在後端...前端單詞變成鏈接...;) – foxybagga 2009-09-02 12:16:27

+1

然後去我的第一個建議和使用str_replace,或者str_ireplace會更好,只要確保當你通過你的短語列表進行鏈接,你通過短語字符串長度降序排序,以避免我提到的問題 – 2009-09-02 12:30:52

+0

嗯好吧謝謝...將嘗試並尋找更多的替代品...將在這裏更新... :D – foxybagga 2009-09-02 14:14:10

0
function auto_href($x) 
     { 
     $x = explode(' ', $x); 
     foreach ($x as $y) 
       { 
       if (substr($y, 0, 7) == 'http://') 
         $y = '<a href="'.$y.'">'.$y.'</a>'; 
       $z[] = $y; 
       } 
     return implode($z, ' '); 
     } 
相關問題