扫描字符串并用链接替换标签

时间:2011-05-04 21:06:51

标签: php arrays str-replace

我有一个这样的数组:

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

我有一个db查询来返回一个段落,其中包含先前在数组中提到的关键字。

我有一个像这样的链接模板:

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

我想要一个简单的函数来扫描该段落并在运行中,只要找到关键字,它就会使用上面的链接模板将其转换为链接。

如果可能的话,我希望它考虑到单数和复数(如框架和框架)

SEO是否可以安全地进行自动关键字链接?

任何想法?

7 个答案:

答案 0 :(得分: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 :(得分:2)

这可行,但不一定是最好的方法。它使用管道字符连接数组,并使用该字符串构建正则表达式。 preg_replace()然后做其余的事情。要求您更改链接模板以使用preg_replace()样式而不是printf()样式

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

编辑:添加了\b字边界,因此您只匹配整个单词而不是内部子字符串。

答案 2 :(得分:1)

首先,这看起来可能更复杂。也就是说,这将替换单词内的单词,如果我们script javascript,{{1}}这个词将是半链接,半字。如果你关心,我不知道。修复它的一种方法是在单词之前和之后添加空格。但同样,这就像它的问题一样,标点符号呢? (。,!?)等。

根据您的需要,您可能需要执行一些正则表达式并使其复杂化。如果您的文本可以包含链接,还可以在链接中创建链接。

只需要考虑一些事项。我认为在SO上有很多这样的例子,所以搜索这个网站以查看你能找到的内容可能是值得的。鉴于过于复杂,我无法提供该代码。如果您只需要简单的方法,那么已发布的其他人应该可以正常工作。


一些参考文献:

Replacing keywords in text with php & mysql

答案 3 :(得分:1)

对于您的主要问题,上述3个答案中的一个应该足够了。

关于这个问题:

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

足够安全..

但有些问题需要解决

  1. 检查此SEO Guide by Google中的第13页。所以,它总是更好 有好的锚文本。我假设 通过这种方法你不会得到一个 非常合适的。

  2. 正如布拉德解释的那样,不要过分。 因此,可能只有2-3 每页关键字,每个链接1个 段落中的关键字和总计 一页中的6-7个链接。你需要 小心没有很多 链接。

  3. “title属性指定额外的 有关元素的信息。“所以 在那里只倾倒一个关键字 可能没有帮助。

  4. 最好选择手动方法,而不是自动化搜索你的东西。

答案 4 :(得分: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);

答案 5 :(得分: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 );

答案 6 :(得分:0)

  

SEO是否可以安全地进行自动关键字链接?

取决于您如何使用它。如果它太明显并且搜索引擎看到一种模式,你可能会在一天醒来并发现你的网站被禁止使用SERPS。