Обтекание слов заголовком с помощью PHP - PullRequest
1 голос
/ 22 декабря 2011

Я работаю над сайтом, который включает глоссарий, в котором объясняются несколько слов. Кроме того, я хочу описать термины в статье, поместив их в промежутки с атрибутом title.

Я получаю все термины из базы данных в массиве:

$terms = array(
    'word1' => 'This is a short description of word1',
    'word2' => 'word2 maybe has something to do with word1'
);

Строка, содержащая текст, может быть:

$string = 'In this sentence I want to explain both, word1 and word2.';

Я попытался просто заменить слова, содержащиеся в строке, на простой str_ireplace ():

foreach($terms as $term => $description)
{
    $string = str_ireplace($term, '<span class="help" title="' . $description . '">' . $term . '</span>', $string);
}

Что происходит сейчас, это то, что слова1 и слово2 заменены правильно. Но, повторяя второй раз по тексту для поиска и замены word2, он снова находит word1 - в заголовке уже созданного промежутка.

Таким образом, результат для word1 будет выглядеть так:

<span class="help" title="This is a short description of <span class="help" title="This is a short description of word1">word1</span>word1</span>

Как я могу запретить PHP заменять одно и то же слово в теге заголовка существующего диапазона? Я не хотел бы использовать preg_replace () для этого, чтобы не анализировать html к нему.

Как я мог это сделать?

Прекрасные приветствия из Германии Chris

1 Ответ

4 голосов
/ 22 декабря 2011

Вы можете использовать strtr для этого:

$string = 'In this sentence I want to explain both, word1 and word2.';
$terms = array(
    'word1' => '<span title="This is a short description of word1">word1</span>',
    'word2' => '<span title="word2 maybe has something to do with word1">word1</span>',
);
echo strtr($string, $terms);

В этом предложении я хочу объяснить и слово1 и слово1 .

См. http://codepad.org/VEBLQcBe для рабочего примера

strtr будет переводить символы или заменять подстроки

Это краткое описание word1word2 может быть как-то связано с word1
...