将html链接添加到纯文本

时间:2011-02-13 20:46:36

标签: php string

考虑我有一个300-400字的文本和一些基本的HTML。例如:

<p>text text word1 text text text filament text text text text text text text text</p>
<p>text text text text text text text text text text text text text text text</p>

我有一个密钥短语列表与他们的网址相关联(约1000条记录)

word1 word2 => 'url'
house home  => 'url1'
flower filament => 'url2'

我需要在文本中找到相应字词的网址。例如:

<p>text text <a href="url">word1</a> text [etc..]

我知道我可以使用简单的str_replace或preg_replace。但我不想添加许多链接。在300-400个单词中,我不想放置超过5-6个链接。

我能做什么?

3 个答案:

答案 0 :(得分:2)

preg_replace()限制参数一起使用,当然它将是第一个X替换,可能是您想要的也可能不是

答案 1 :(得分:1)

一个小例子,justs使每个所需单词的第一个实例变为粗体。也应该很容易做其他的东西。 :)

<?
    // Your text
    $s = <<<YourText
<p>text text word1 text text text filament text text text text text text text text</p>
<p>text text text text text text text text text text text text text text text</p>
YourText;

    // The words you want to highlight
    $linkwords = array('text', 'word1', 'filament');

    // Split the string by using spaces
    $words = explode(' ', $s);
    print_r($words);

    // Words you have highlighted already.
    $done = array();

    // Loop through all words by reference
    foreach ($words as &$word)
    {
        // Highlight this word?
        if (array_search($word, $linkwords) !== false)
        {
            // Highlighted before?
            if (array_search($word, $done) === false)
            {
                // Remember it..
                $done[] = substr($word,0);
                // And highlight it.
                $word = '<b>'.$word.'</b>';
            }
        }
    }

    echo  implode(' ', $words);

答案 2 :(得分:0)

首先,根据您的问题,我认为 words / links 的比率大约是60。所以,举个例子,请执行以下操作:

define('WLRATIO', 60);

$mytext = "text text ..... ";
// Rough estimation of word count
$links = count(explode(' ', $mytext)) / WLRATIO;

$keywords = array(
    'foo' => 'url1',
    'bar' => 'url2'
    ...
);

$keys = array_keys($keys);

while ( $links-- ) {
    $n = rand(0, count($keys)-1);
    $mytext = preg_replace('/'+$keys[$n]+'/', '<a href="'+$keywords[$keys[$n]]+'">'+$keys[$n]+'</a>', $mytext, 1);
}

echo $mytext;