Как заменить слова preg_replace без дубликатов?

Я хочу создать функцию PHP, которая заменит некоторые слова из текста внутренними ссылками. Это работает до сих пор, но если у меня есть два совпадения, я получаю недопустимый код HTML.

Пример:

 Welpen / hunde  
 Chihuahua Welpen / hunde, чихуахуа
function seo_internal_links($str, $links, $limit) { foreach($links AS $link){ $pattern[$k] = "~\b($link[phrase])\b~i"; $replace[$k] = '<a href="'.$link[link].'">\\1</a>'; $k++; } return preg_replace($pattern,$replace,$str, $limit); } seo_internal_links($ad[text], $seo_internal_links, $limit = 1); 

Это приведет к:

 <a href="//hunde,chihuahua">Chihuahua <a href="/hunde">Welpen</a></a> 

Кто-нибудь знает, как этого избежать? Я также хотел бы ограничить количество обращений, но предел в preg_replace учитывает только уникальные слова, а не весь массив.


Некоторые аддитивные объяснения.

Я забираю слова для замены и их соответствующие ответы из таблицы. Их сотни.

  $stmt =" SELECT * FROM $T73 ORDER BY prio desc "; $result = execute_stmt($stmt, $link); while ($row = mysql_fetch_object($result)){ $seo_internal_links[$row->ID]['phrase'] = $row->phrase; $seo_internal_links[$row->ID]['link'] = $row->link; } $my[text] = seo_internal_links($my[text], $seo_internal_links, $limit = 1); 

Проблема возникает, потому что функция замены снова начнет в начале текста для поиска следующего слова. Вместо этого он должен просто продолжаться внутри текста.

Моя цель – вставить внутренние ссылки на текст моего веб-сайта всякий раз, когда соответствующее слово находится внутри таблицы, полной ключевых слов. Например, замените «beagle welpen» на « beagle welpen» . Если слово «welpen» также находится внутри таблицы, оно сломает html-код и снова добавит href-тег.

Вместо использования цикла создайте одно регулярное выражение и измените весь документ за один проход. То есть вместо этих регулярных выражений:

 ~\b(foo)\b~i ~\b(bar)\b~i ~\b(baz)\b~i 

Используйте только этот:

 ~\b(foo|bar|baz)\b~i 

Возможно, вам захочется взглянуть на использование implode для управления регулярным выражением.

Вы также должны быть осторожны с символами, которые имеют особое значение внутри регулярного выражения. Вы можете найти preg_quote полезным для этого.