Например на моем сайте есть комментарии, которые оставляют пользователи, Вопрос?
Как лучше делать:
1) Сохранять в бд полностью все что ввел пользователь, со всеми тегами, со всеми внутреними множественными пробелами итд и на выводе коментария, все фильтровать и выводить
2) Или перед записью в БД весь коментарий фильтровать на все это, а потом просто выводить
Можно разделить на 2 таблицы, в первой хранить id, владельца комментария, дату ну и другие "легкие" данные. Во второй таблице присваивать соответствующему id комментария его теги, текст и т.д.
Обязательно выставить индексы в первой таблице и во второй по id.
Неправильно понял вопрос, извиняюсь. Фильтровать ДО записи в БД - естественно.
спасибо. А если я из комментария делаю активные ссылки, перенос строки заменяю на итд И получается что мой комментарий после фильтрации содержит html код, то все равно делать фильтрацию До записи в бд?
@therealvetalhidden когда в жизни что-то бывает лучше, а что-то хуже, то очень скоро то, что хуже забывается и о нем никто не знает.
Все зависит от задачи. Я написал: боитесь? экономите? уверены, что изменений в правилах не будет или они не критичны? Уверены, что если пользователи ошибутся, наделают ошибок, их нужные данные затрутся - это не принесет серьезного ущерба? Фильтруйте сразу.
Хотите гибкости? Оставляйте как есть, потом решите.
Ну а дальше уже конкретика. Например, если у вас контент редко создается, но часто отображается и производительность критична, то, может быть, выгоднее один раз отфильтровать, что б потом не дергаться.
Если у вас один и тот же контент должен отображаться по-разному (в полном виде для админа и безопасном для юзера) - то тут никуда не денешься... и т.д.
@victorvsk спасибо) я решил сделать так:
1) перед бд буду фильтровать комментарий скажем фильтром безопасности trim substr mysql_real_escape_string strip_tags htmlspecialchars
2) а на выводе буду уже фильтровать на уровне добавления html и удаление внутрених пробелов
@therealvetalhidden зависит от того, что у вас за контент. например, если решите все же разрешить тег то всякие > потом надо будет еще преобразовывать обратно, если их засейфит.
Перед сохранением в базу обрабатываете с помощью htmlpurifier, который вычистит из вашего HTML всю грязь, оставив только нужные вам теги (заголовки, выделение жирным, курсив, списки и.т.д).
Сама по себе эта операция нетривиальная и кушает некисло ресурсов, поэтому ТОЛЬКО при сохранении, никаких подобных операций перед выводом.
спасибо. А если я из комментария делаю активные ссылки, перенос строки заменяю на
итд И получается что мой комментарий после фильтрации содержит html код, то все равно делать фильтрацию До записи в бд?