добавление HTML-ссылок в простой текст - PullRequest
0 голосов
/ 13 февраля 2011

Предположим, у меня есть текст из 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>

И у меня есть список ключевых фраз с их URL-адресами (около 1000 записей)

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

Мне нужно разместить URL для соответствующего слова, найденного в тексте.Пример:

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

Я знаю, что могу использовать простой str_replace или preg_replace.Но я не хочу добавлять много ссылок.Из 300-400 слов я не хочу размещать более 5-6 ссылок.

Что я могу сделать?

Ответы [ 3 ]

2 голосов
/ 14 февраля 2011

используйте preg_replace () с параметром limit , конечно, это будут первые X замены, которые могут или не могут быть тем, что вы хотите

1 голос
/ 14 февраля 2011

Небольшой пример 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);
0 голосов
/ 14 февраля 2011

Во-первых, из вашего вопроса я понял, что соотношение слов / ссылок будет около 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...