nVirus (17.07.2009/09:05)
У mysql_real_escape_string() Есть свои приколы, она не все кавачкы икранирует, и иногда бывает, а у меня очень часто, ошибка записи при обычных кавычкаъ... ''
Лучше фильтровать через check() хоть он
Чтоб дать правильный ответ, давай заглянем в теорию.
Для чего нам вообще нужно резать кавычки?
Тут опять таки, нужно разбить на 2 пункта.
1) Мы принимаем данные от пользователя и добавляем их в базу данных.
2) Мы извлекаем данные из базы и выводим их в браузер (чаще всего)
Опять вернемся к первому вопросу, для чего резать кавычки?
Ответ - для исключения SQL инъекции.
mysql_real_escape_string() как раз и предназначена для этого. Она экранирует те кавычки (') которые интерпретируются базой как коммандные и являются опасными.
Другие кавычки не представляют для нас опасности при добавлении в базу данных.
Другой вопрос, когда мы извлекаем данные из базы и выводим их в браузер, тут уже нужна другая фильтрация, чтоб исключить XSS уязвимость и ошибки XHTML.
Но по любому, естть хорошее правило, что данные лучше всего хранить именно в том виде, как они заносились.
Функция check() совмещает в себе и входную (эскейп) и выходную фильтрацию.
Для мелких, однострочных текстовых полей, это вполне применимо.
Но вот для сложных, больших текстовых массивов, особенно с разбивкой по страницам, подобная функция только мешает.
К примеру, избавиться от ошибок XHTML на форуме мне удалось только тогда, когда я полностью исключил функцию check() при добавлении данных, а разбил фильтрацию на вход-выход, как я писал выше.