Xpoint
   [напомнить пароль]

Как правильно разобрать HTML-код для вставки в него своего

Метки: [без меток]
2009-06-13 20:54:53 [обр] Николаич[досье]

Есть задача - реализовать контекстные ссылки "как в sape". То есть на входе в процедуру имеется некий произвольный HTML-код (ну, сайты же всякие бывают) и надо посредством заданного ключевого слова разместить в неком его фрагменте ссылку.

Возникает вопрос по хранению данных. То есть как хранить эти сопоставления ссылка - кусок текста. Ну и по парсингу HTML, ведь ладно бы тэги вырезать и заменить кое чего. А тут надо уже существующие ссылки не покоцать и свои вставить.

спустя 59 минут [обр] Филипп Ткачев(20/112)[досье]
По вопросу хранения данных: это значительно зависит от объема их.
А при парсинге используйте регулярные выражения.
спустя 11 минут [обр] Николаич[досье]

Объемы - килобайты. Страничка редко бывает больше 100Кб. Меня интересует сам алгоритм хранения: словосочетание (которое кстати на странице может встретиться и не один раз) в конкретном куске текста.

Парсинг - знаю про такие :) Грубо говоря стоит задача - выдрать текст без тэгов и красиво показать пользователю, дать ему возможность выбора фрагмента текста для вставки ссылки и наконец - собрать все обратно, при этом не потеряв и корректно вставив ссылку в исходный текст, в котором тэги как раз присутствуют.

спустя 41 минуту [обр] Филипп Ткачев(20/112)[досье]

Хранить можно искомую фразу в массиве. А слово/словосочетание "обрамить" чем-нибудь.

Для показа предложения пользователю можно использовать strip_tags(), а вот при поиске логично разбивать фразу на слова, между которыми возможны теги инлайн форматирования (b,i,span etc...).
Почему инлайн? Потому что может выйти так, что ссылка попадет между ячейками таблицы или различными блоками. Вообще лучше искать текст для ссылок внутри абзацов. А остальной игнорировать.
С одной стороны кажется, что неправильно. Но, с другой, контекстность определяется именно массовым текстом страницы.

А решение сводится к построению динамического сложного регулярного выражения, проверяющего входной поток на поставленные выше условия.
Идеологически было бы правильно найти количество таких соответствий и заменить произвольное из них.

Powered by POEM™ Engine Copyright © 2002-2005