2012-02-05 2 views
0

Можно создать дубликат:
Highlight keywords in a paragraphМанипулирование HTML абзацы в PHP

Вот еще один вопрос для вас. У меня есть небольшая проблема в php, и я подумал, прежде чем найти необычное решение самостоятельно, возможно, более простой и быстрый способ решить проблему.

Предполагая, что у меня есть строка, которая содержит HTML теги параграфов, как:

$string="<p>Hello this is nick</p> 
     <p>i need some help over here</p> 
     <p></p><p>Does anyone know a solution</p>" 

и массив укусы, который содержит некоторые «Улика» слова:

$array=("Hello","nick", "help", "anyone", "solution") 

теперь я хотел бы сделать следующие: Вывести $string в браузер, но слова "clue" должны иметь специальный формат, например выделены жирным шрифтом или выделены.

Что заставляет меня найти это немного сложно, так это то, что я хочу сохранить абзацы так, как есть. Другими словами, я хочу, чтобы конечный результат выглядел точно так же, как и исходный (включая новые строки/новые абзацы), но с некоторыми словами bold

Я думал, что могу использовать strip_tags для удаления тегов и </p>, а затем разбить возвращаемую строку на пространства. Чтобы получить массив слов. Затем я выводил каждое слово отдельно, проверяя, содержится ли это слово в $array. Если да, то он будет выводиться жирным шрифтом.

Таким образом, я четко теряю понятие новых абзацев, и все абзацы будут объединены в один.

Есть ли простой способ исправить это? Например, способ получить знания, например, слово «Привет» начинается в новом абзаце? Или есть что-то еще, что я могу сделать?

+0

Этот вопрос имеет значение -1, поэтому я проголосовал за него, так как я не вижу ничего плохого в вопросе, а нисходящий избиратель не учитывает, какую проблему он имел с собой. – Teekin

ответ

0

Почему бы просто не просто заменить ключевые слова?

$string = str_ireplace(array('hello', 'nick'), array('<strong>hello</strong>', '<strong>nick</strong>'), $string); 

(конечно, второй массив, переданный функции будет генерироваться заранее)

+0

@ Lepidosteus Я думаю, что таким образом мне снова придется разбить строку $ на слова, а понятие абзаца не будет существовать. Исправьте меня, если я ошибаюсь –

+0

Нет, код Lepidosteus должен работать - просто попробуйте :) – Daan

0

использование str_replace и заменить слова с жирными метками вокруг них

+0

Привет, страттон за ваш ответ. Можете ли вы уточнить, например, потому что я не совсем понял, как я могу это сделать? –

+0

посмотрите на ответ @ Lepidosteus – clem

2

Просто заменить слова с отформатированных версиями себя , Регулярное выражение ниже поддерживает регистр и заменяет только полные слова (так что, например, в слове «snicker» слово «nick» внутри него не заменяется).

+0

@ Juhana благодарит за ваш ответ.Я действительно не понимаю, что такое регулярное выражение, но я попытаюсь найти его с помощью google :) Мне просто нужно подтвердить, что первый параметр функции заканчивается на i? И если да, то что я имею в виду? Также какая переменная состоит в том, что $ 1 во втором параметре (если это переменная)? –

+0

«i» означает, что он нечувствителен к регистру, поэтому он заменит все варианты: «привет», «привет», «привет» и т. Д. «$ 1» не является переменной, это означает найденное совпадение (если он нашел «привет», то $ 1 означает «привет»). – JJJ