- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Ребята, реализовую подобное на пхп., но столкнулся с проблемой, если в тексте уже есть тег <b> смысл ставить еще один, как обойти не знаю
Тут сложнее, имхо, придется делать полный разбор текста. Идете по html-коду от начала до конца.
Натыкаетесь на открывающий тэг, заносите в список активных.
Натыкаетесь на закрывающий тэг, если тэг в списке активных, вычеркиваете из списка.
Натыкаетесь на слово, проверяете не находится ли оно в списке тех которые скрипт должен обрамить тэгом. Если находится, проверяете какие тэги сейчас в списке активных. Если нужного нет, обрамляете.
Проблем с кривым html-кодом будет туева хуча.
разбивать на кол-во слов и делать разные варианты
или не заморачиваться, и обрамить каждое слово по отдельности ;)
Тут сложнее, имхо, придется делать полный разбор текста. Идете по html-коду от начала до конца.
Натыкаетесь на открывающий тэг, заносите в список активных.
Натыкаетесь на закрывающий тэг, если тэг в списке активных, вычеркиваете из списка.
Натыкаетесь на слово, проверяете не находится ли оно в списке тех которые скрипт должен обрамить тэгом. Если находится, проверяете какие тэги сейчас в списке активных. Если нужного нет, обрамляете.
Проблем с кривым html-кодом будет туева хуча.
Кривово хтмл и других не нужных тегов не будет, это для своих проектов.
Насчет обрамлять по одиночке , тож не правильный подход :)), с таким же успехом и словоформ не надо
По поводу предложенного вами решения, эти же мысли у меня и в голове, но это не решение :), уж проще после в тексте найти все с тегами, и внутри каждого вырезать все не нужные и записать на старое место, и так циклом ... но ведь не решение :))
Может есть умы которые предложат гениально-простую идею :))
Чтобы удалить лишние теги
$text = preg_replace ('/<b>(*.)<b>(*.)</b>(*.)</b>/Ui', '<b>\\1\\2\\3</b>', $text);Miracle, чтобы не терзать чужие сервера, используйте phpMorphy.
Cage, какая-то загадочная у вас регулярка.
Мое имхо - надо делать так: эксплодите строчку в массив по "<b>", делаете реверс массива, проходите по нему в поисках двойного "</b>", если находите - удаляете лишний и объединяете 2 последующих элемента. Ну а дальше реверсуете массив и имплодите с разделителем "<b>".
Cage, какая-то загадочная у вас регулярка.
В ней, кстати, не хватает парочки обратных слешей :). Вот так правильно:
$text = preg_replace("/<b>(.*)<b>(.*)<\/b>(.*)<\/b>/Ui", "<b>\\1\\2\\3</b>", $text);В ней, кстати, не хватает парочки обратных слешей
В общем случае все равно работать не будет, попробуйте хотя бы на строке "111<b>222<b>333</b>444<b>555</b>666</b>777". Более того, в общем случае регулярками вообще не получится.
Для таких задач испольуется алоритм, на подобие того, что описал ИМХО, только использовать надо не "список активных", а класть теги на стек.
В общем случае все равно работать не будет, попробуйте хотя бы на строке "111<b>222<b>333</b>444<b>555</b>666</b>777".
В общем случае не будет работать, безусловно. Но ТС описал свою конкретную проблему, а я предложил ему конкретное решение, очень простое и уже готовое :).
Более того, в общем случае регулярками вообще не получится.
while ($text != $old_text) {$old_text = $text;
$text = preg_replace("/<b>(.*)<b>(.*)<\/b>(.*)<\/b>/Ui", "<b>\\1\\2\\3</b>", $old_text);
}
Я не знаю, насколько этот код будет эффективно (быстро) работать, но он хотя бы будет работать :).
Я не знаю, насколько этот код будет эффективно (быстро) работать, но он хотя бы будет работать
Вы даже не представляете себе, насколько неэффективно этот код будет работать (хотя бы из-за использования максимальных квантификаторов), в то время как существует алгоритм, требующий всего одного прохода по тексту, да и его можно совместить с поиском самих слов для замены (т.е. издержек на проверку не будет вообще никаких).
З.Ы. Кстати, я имел в виду одни лишь регулярки, без циклов и прочего ;)
Kolyaj, так делитесь как? Это и ищемс :). И еще что бы в общем случае, например любой другой тег, с атрибутами и свойствами?!Cage, Спасибо, подождем Kolyaj.