2009-09-02 50 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, ' '); 
     }