За последние 24 часа нас посетили 18055 программистов и 1599 роботов. Сейчас ищут 873 программиста ...

strip_tags и mysql

Тема в разделе "PHP и базы данных", создана пользователем Апельсин, 20 мар 2010.

  1. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Luge
    Тогда выход напрашивается у меня один (кроме как застрелиться или выпить йаду):
    1. Перед добавлением сообщения в базу, в отдельное поле вписываем содержимое сообщения без всех слов менее 4-х символов, без тегов и знаков препинания.
    2. В поиска искать по этому полю, а "подсвечивать" и выводить основное, в котором все теги есть.
    Полу "тру" вышло))
     
  2. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    В принципе, тут уже озвучили все мои фантазии.

    1. хранить текст с BB, а не с html
    2. хранить отдельно рафинированный текст (мне бы хватило и strip_tags, но можно заморочиться)
    3. Посмотреть Sphinx, вот наверняка в нем есть поиск с учетом наличия тегов.

    Омг
     
  3. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Итак, сделал на основе всего вышесказанного. Выложу тут решение, вдруг кому понадобится.
    1. Сделал второе поле text2
    2. При вставке сообщения в базу в поле text (которое без изменений со всеми тегами), инфа дублируется в поле text2 таким образом [sql]mysql_query("INSERT INTO `forum_posts` VALUES (....,'".mysql_real_escape_string($body)."', '".strip_words($body)."')");[/sql]
    3. Сама функция
    PHP:
    1. function strip_words($words)
    2. {
    3.     $end = preg_replace('/([ ](\S){1,3}[ ])|([^a-zа-яё0-9 \-])/i',' ',strip_tags($words));
    4.     $end = preg_replace('/[ ]{2,}/i',' ',$end);
    5.     return $end;
    6. }
    (не идеальная регулярка правда)
    4. Ну и запрос для поиска
    [sql]SELECT `id`, `ulogin`,`user_id`,`date`, `text` FROM `forum_posts` WHERE (`text2` LIKE "%<img%" ) ORDER BY `date` LIMIT 10[/sql]
    5. Функция подсветки уже была озвучена, хотя можно и без нее это все юзать.

    Всем спасибо за совет. Если кто чем захочет улучшить данный набор букаф - рад буду ознакомиться.
     
  4. mirrr

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

    С нами с:
    17 янв 2011
    Сообщения:
    1
    Симпатии:
    0
    И при загрузке страницы каждый раз преобразовывать bb-коды в html, да я смотрю спецы собрались. А в чем преимущество? А если ввод идет в html?

    По второму - тоже спорный вопрос, если нужно организовать поиск в новостном движке (~100000 статей), хранить в базе еще копии статей - напряг...
     
  5. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    А REGEXP() не поможет?
     
  6. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Оторвать руки за апание старых топов. Еще бы через пять лет подняли эту позорную тему.
    Все давно решилось и пять раз перетравлено.
     
  7. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Извиняюсь, не посмотрел. И за regexp() тоже извиняюсь.