За последние 24 часа нас посетили 32897 программистов и 1755 роботов. Сейчас ищут 838 программистов ...

Как вернуть html-теги?

Тема в разделе "PHP для новичков", создана пользователем servitpol, 7 мар 2017.

  1. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Суть в чем, есть текст с html тегами в базе данных. Мне нужно провести замену кусков теста и разных слов непосредственно в самом тексте, не цепляя теги h1-h6, мета-теги, альты и тайтлы картинок. Т.е. алгоритм я вижу так:
    1. Беру текст из БД
    2. Чищу от тегов
    3. Провожу замену того что мне нужно
    4. Возвращаю все теги на место
    5. Записываю полученный результат обратно в БД.

    Собственно сам вопрос: как грамотно организовать пункты 2 и 4 при условии что текстов несколько тысяч?
     
  2. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Мне нужно заправить машину, я вижу это так:
    1. Приезжаю на заправку
    2. Скручиваю с машины колеса
    3. Заправляю.
    4. Возвращаю колеса назад.

    Собственно сам вопрос: нахрена?
     
  3. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Я вроде доступным языком написал "Мне нужно провести замену кусков теста и разных слов непосредственно в самом тексте, не цепляя теги h1-h6, мета-теги, альты и тайтлы картинок."

    Если непонятно, объясню еще детальнее: допустим мне нужно заменить слово "машина" на слово "велосипед" но при этом не производя такую замену в тегах h1-h6, мета-тегах, альтах и тайтлах картинок. Делая по принципу:
    PHP:
    1. str_replace($key, $newkey, $content);
    Я заменю слово "машина" на "велосипед" даже если оно встречается в тегах.
    Если делать по принципу:
    PHP:
    1. preg_replace($pattern, $newkey, $content);
    То какое нужно тогда соорудить регулярное выражение? У меня мыслей нет..

    Возможно есть другие варианты без регулярки? Собственно сабж..

    Я надеюсь доходчиво объяснил зачем "скручивать колеса перед заправкой"?
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Опять парсер?
     
  5. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Нет, мне нужно массово проставить анкорные ссылки вида <a href="#">кусок текста</a>. Но мне не нужно чтоб ссылка была из тегов и мета-тегов...
     
  6. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    http://phpclub.ru/detail/article/regexp_2 - вот эта статья должна помочь. Она про то, как делать проверку регулярками на то, что идёт до и после искомого. Другого выхода я не вижу.
     
    servitpol нравится это.
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.599
    Симпатии:
    1.764
    DOMDocument попробуйте
     
  8. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    а можно пример? я курил манул по dom в php, но что-то не въехал как он мне поможет((
    Спасибо за ссылку, буду пробовать...
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.599
    Симпатии:
    1.764
    К примеру, выбирать только определённые теги/набор тегов для замены. Ещё (я так не делал, но где-то читал) можно использовать XPath и при работе с HTML, а не XML, тогда вообще всё становится проще, если правильно XPath-запрос составить.

    Всё зависит от того, насколько сложная структура внутри у вас. Хотя я, к примеру, ни разу не помещал в базу html-страницу целиком, с метатегами и прочей лабудой.
     
  10. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Я к сожалению пока не знаком с XPath, но чуствую время пришло!)

    Та я тоже не помещал, но wordpress собака это делает((
     
  11. Emilien

    Emilien Активный пользователь

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    Есть и другой подход.
    Код (Text):
    1. word|<[^>]*>(*SKIP)(*F)
    https://regex101.com/r/7ngZkY/1

    Как-то так https://regex101.com/r/7ngZkY/2
     
    servitpol нравится это.
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Все гораздо проще. Навигация по DOM через DomDocument во многом аналогична таковой на клиентской стороне.
    Еще один любитель ковырять регулярками формализованные, стандартизированные структуры данных, для работы с которыми есть нативные модули... Хлебом вас не корми, дай регулярками поковырять XML, HTML и, порой, даже видал, как регулярками JSON народ разбирает...
     
  13. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Огромное спасибо, то что нужно...
    Я честно так и не въехал как мне это должно помочь. Получил я чистый текст без тегов, а дальше что? Как провести в этом тексте замену и вернуть его первоначальное состояние?
     
  14. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А ты потрать болье двух минут, почитай документацию. А то иначе ты так никогда ни во что не въедешь, и будет у тебя все на костыльных сниппетах из интернета держаться.
     
    denis01 нравится это.