2011-12-22 2 views
1

Я работаю над веб-сайтом, который включает глоссарий, в котором объясняются несколько слов. Дополнительная информация Я хочу описать термины в статье, поставив их в пробелы с атрибутом title.Обертывание слов с заголовком span с PHP

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

$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 являются заменой правильно. Но повторив второй раз над текстом для поиска и замены слова2, он снова находит слово1 - в названии уже созданного интервала.

Так что результат для 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

ответ

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

В этом предложении я хочу объяснить, как, < название пядь = "Это короткое описание слова1 "> word1 </span > и < span title =" word2 возможно имеет что-то делать со словом1 "> word1 </span >.

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

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

+0

О людях, я искал решение в течение недели ..:/Большое спасибо! Но strtr чувствителен к регистру, не так ли? Есть ли какой-либо способ или альтернатива, чтобы он не учитывал регистр? –

+2

@ chris.ribal, если вы посмотрите в разделе комментариев на странице руководства 'strtr', есть некоторые' stritr'-реализации. – Petah

Смежные вопросы