PHP 文章內容中的關鍵詞加連結

來源:互聯網
上載者:User

操作步驟:
這個問題看似簡單,做起來卻有些麻煩,我用一種不太聰明的方式實現:
1、把已有的關鍵字連結替換成文字
2、把關鍵字從長至短排列
3、從長至短替換關鍵字為連結,替換的同時尋找有沒有包含其他關鍵字,如果有,把其中子關鍵字替換成{子關鍵字的md5值}
4、把{子關鍵字的md5值}替換回來

<?header("Content-type: text/html; charset=utf-8"); function _sortDesc($a, $b) { return (strlen($a[0]) < strlen($b[0])) ? 1 : -1;}$linkDefs = array(  '茶葉,111.htm',  '中國茶葉大觀,222.htm',);$linkMap = array();foreach($linkDefs as $row) { $linkMap[] = explode(',', $row);}$str = '這兒是茶葉的連結。<br />這兒是中國茶葉大觀的連結。<br />這兒是<a href="111.html">茶葉</a>的現有連結。<br />這兒是<a href="222.html">中國茶葉大觀</a>的現有連結。<br />';//把原有的連結替換成文字foreach($linkMap as $row) { $str = preg_replace('/(<a.*?>\s*)('.$row[0].')(\s*<\/a>)/sui', $row[0], $str);}//關鍵字從長至短排序usort($linkMap, '_sortDesc');//var_dump($linkMap);$tmpKwds = array(); //存放暫時被替換的子關鍵字foreach($linkMap as $i=>$row) { list($kwd, $url) = $row; for($j=$i+1; $j<count($linkMap); $j++) {  $subKwd = $linkMap[$j][0];   //如果包含其他關鍵字,暫時替換成其他字串,如 茶葉 變成   if(strpos($kwd, $subKwd) !== false) {   $tmpKwd = '';   $kwd = str_replace($subKwd, $tmpKwd, $kwd);   $tmpKwds[$tmpKwd] = $subKwd;  } } //把文字替換成連結 $str = preg_replace('/('.$row[0].')/sui', '<a href="'.$row[1].'">'.$kwd.'</a>', $str, -1);  // 所有的匹配項都會被替換}//把代替子關鍵字的字串替換回來foreach($tmpKwds as $tmp=>$kwd) { $str = str_replace($tmp, $kwd, $str);}echo $str;?>

函數preg_replace()
參考 http://baike.baidu.com/view/4463003.htm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.