1

我正在一个包含词汇表的网站上工作,其中解释了一些单词。另外,我想通过将它们放在具有标题属性的跨度中来描述文章中的术语。

我从数组中的数据库中获取所有术语:

$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);
}

现在发生的是,word1 和 word2 被正确替换。但是通过第二次迭代文本以搜索和替换 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 解析为它。

我怎么能那样做?

来自德国的可爱问候克里斯

4

1 回答 1

4

您可以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);

在这句话中,我想解释一下,<span title="This is a short description of word1">word1</span> 和 <span title="word2 可能与 word1">word1</span> 有关。

有关工作示例,请参见http://codepad.org/VEBLQcBe

strtr将翻译字符或替换子字符串

于 2011-12-22T04:03:25.660 回答