2011-05-04 60 views
2

標籤我有一個這樣的數組:掃描一個字符串和替換鏈接

$keywords = array('php', 'html', 'css'); 

我有一個數據庫查詢返回一個段落,其中包含以前的陣列中提到的關鍵詞。

我有這樣一個鏈接模板:

$linktpl = '<a href="%s" title="%s">%s</a>'; 

我想要一個簡單的功能來掃描款和動態,只要找到它,它轉換成使用上面的鏈接模板的鏈接關鍵字。

而且如果可能,我希望它考慮到單數和複數(如框架和框架)

而且它是安全的搜索引擎優化,使這個自動化的關鍵字鏈接?

什麼想法?

回答

0

str_replace()將幾乎肯定會執行搜索的最快方法/替換

我建議你先構建你的搜索詞陣列,則更換,然後進行更換。

$searches = array("php", "html", "css"); 
$replacements = array(); 
while($row = mysql_fetch_assoc($r) { 
    $replacements[] = sprintf($linktmpl, $row['url'], $row['title'], $row['word']); 
} 
$html = str_replace($searches, $replacements, $html); 
0
$paragraph = /* YOUR PARAGRAPH CONTENT */; 
$paragraph = str_replace(array('php' , 'html' , 'css') , array('<a href="url/php/" title="php">PHP</a>' , '<a href="url/html/" title="html">HTML</a>' , '<a href="url/css/" title="css">CSS</a>') , $paragraph); 
2

這會工作,但不一定是最好的辦法。它將您的數組與管道字符連接起來,並使用該字符串構建正則表達式。 preg_replace()然後完成剩下的工作。要求你改變你的鏈接模板使用,而不是printf()風格

preg_replace("/\b(" . implode("|", $keywords) .")\b/", "<a href='\\1'>\\1</a>", $paragraph); 

編輯preg_replace()風格:加入\b字邊界,所以你只匹配整個單詞,而不是內部子。

1

首先,這看起來可能會更復雜。也就是說,如果我們有script這個詞,javascript就是半連接,半個詞,這就代替了單詞內部的單詞。我不知道你是否在意。解決這個問題的一種方法是在單詞前後添加空格。但是,這又是一個問題,如同標點符號一樣? (。,!?)等

根據您的需要,您可能需要做一些正則表達式並使其複雜化。還有一點需要注意的是,如果您的文本可以包含鏈接,您可以在鏈接中創建鏈接。

只是一些項目要考慮。我認爲已經有很多這樣的例子了,所以可以通過搜索這個網站來看看你能找到什麼。鑑於過於複雜,我無法提供該代碼。如果你只需要簡單的方法,其他已發佈的人應該工作得很好。


一些參考:

Replacing keywords in text with php & mysql

4
$string = 'this is the php test subject.'; 

// associate keywords with their urls 
$urls = array(
'php' => 'http://www.php.net', 
// and etc... 
); 

// this callback will take the matches from preg and generate the 
// html link making use of the $urls dictionary 
$linker = function($matches) use($urls) { 
    $urlKey = strtolower($matches[1]); 
    return sprintf(
     '<a href="%s" title="%s">%s</a>', 
     $urls[$urlKey], $matches[1], $matches[1] 
    ); 
}; 

// do the magic 
$regex = '/\b(' . preg_quote(implode('|', $keywords), '/') . ')\b/i'; 
preg_replace_callback($regex, $linker, $string); 

使用正則表達式的優點是,我們可以利用\b修改,以確保我們捕捉的情況下,如(php)PHP.,或phpp和交易與他們正確。

1

對於你的主要問題,以上3個答案之一應該就足夠了。

對於這個問題:

and is it safe for SEO to make this automated keyword linking? 

它是足夠安全..

但也有一些擔憂,其需要在這個SEO Guide by Google解決

  1. 檢查13頁。所以,總是有更好的 有好的錨文本。我通過這種方法假設 ,你不會得到一個非常正確的 。

  2. 正如布拉德解釋的那樣,不要過頭。 因此,每頁可能只有2-3個 關鍵字,每個 關鍵字有1個鏈接,頁面中有6-7個鏈接的總共 。你需要 要小心,沒有很多 的鏈接。

  3. 「標題屬性指定了有關元素的額外信息 。」所以 只傾倒那裏的關鍵字 可能沒有幫助。

它始終是更好地去手動的方法,而不是自動化SEO'ing你的東西。

+0

謝謝你的想法,但你究竟是什麼意思? – med 2011-05-04 21:29:46

+0

@med嗨,意思是你不應該這樣做,而是實際上手動添加鏈接到它的與文本相關的關鍵字。這確保它們正確地完成並且沒有完成,IE鏈接場類型設置。 – 2011-05-04 21:32:57

+0

這樣做很明顯,但是與文本相關的鏈接呢?例如(php)這會是一個問題嗎? – med 2011-05-04 21:40:04

0

是否安全的SEO使這個自動化的關鍵字鏈接?

取決於您如何使用它。如果這太明顯了,搜索引擎會看到一種模式,那麼有一天你可能會醒來,並發現你的網站被禁止使用SERPS。