| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Фильтрация данных |
| Автор: DioNiR 8.4.2007, 00:15 | ||
| Проблема такова: Есть POST запрос. Если я данные отфильтрую например
то все мои BBкоды сбиваются. Но это не одна фунция чем я фильтрую данные. Собствено как надо фильтровать данные из БД или в БД. При этом не затрагивая BBкоды? |
| Автор: SelenIT 8.4.2007, 00:44 |
| DioNiR, для самой БД вообще данные можно не фильтровать - главное, правильно составлять запрос, прослешивая строковые данные и не допуская данные от пользователя в управляющие элементы типа LIMIT. База умеет хранить что угодно, для нее не существует "опасных символов". Htmlspecialchars имеет смысл только при выводе, для профилактики XSS и надругательств над дизайном. А что за bb-коды такие, которые от Htmlspecialchars ломаются? Что в них за символы из разряда спецсущностей - кавычки, что ли? |
| Автор: DioNiR 8.4.2007, 00:55 |
| ББ коды у меня заменяются на HTML код. Поэтому htmlspecialchars вместо место того чтобы HTML. Он его фильтрует и выводит как обычный код. |
| Автор: SelenIT 8.4.2007, 01:03 |
| Так надо сначала делать htmlspecialchars, а только потом парсить bb-коды, логично? Не случайно ж для bb-кодов обычно выбирают символы, не пересекающиеся с HTML-спецсущностями... |
| Автор: DioNiR 8.4.2007, 01:12 | ||
| в том то и дело он изночально изменят символы: < > " и т.д Что PHP код становится не читабельным. Если поптыатся изменить в обратном типо:
То HTML начинает выводиться не как код. |
| Автор: SelenIT 8.4.2007, 01:27 |
| DioNiR, можно коротенький пример данных с "испорченным PHP-кодом" до и после преобразования? |
| Автор: DioNiR 8.4.2007, 01:32 | ||||||
До преобазования:
После:
Собствено вот Функция:
|
| Автор: Хрипа 8.4.2007, 01:45 |
| в базу пишеш сразу с BB кодом.. перед показом пропускаешь через фукнцию фильтра. Ктомуже это позволит сделать редактирования сообщений. К примеру простейшая оработка $arr_match = array("b:"); $arr_match_close = array(":b"); for($m=0;$m<count($arr_match);$m++) if(eregi($arr_match[$m]."(.*)".$arr_match_close[$m],$db_message,$regs)){ $size = sizeof($regs); for($i=0;$i<$size;$i++) { $db_message = eregi_replace($arr_match[$m]."(.*)".$arr_match_close[$m],$arr_match[$m].$regs[$i].$arr_match_close[$m],$db_message ); } }else{Континью} } print nl2br($db_message); Чтонить типа такого )) |
| Автор: SelenIT 8.4.2007, 01:53 | ||
Ага. http://www.php.net/manual/ru/function.highlight-string.php, оказывается, сама по себе тоже заменяет спецсущности. Так что придется в строке 11 перед ней сделать обратную замену спецсущностей, что-то вроде такого...
|
| Автор: DioNiR 8.4.2007, 02:08 |
| Работает почти как надо. Только проблема стала другая. Из за чего всё и началась. Это сделать Подцветку кода. Для чего я и юзал фунцию highlight_string. |
| Автор: SelenIT 8.4.2007, 02:12 | ||
| Если юзать ее так, как в моем последнем посте (вместо просто highlight_string('$1', true) в строке 11), подцветка разве не работает? Альтернативный вариант - сделать строчку 3 более "избирательной", наподобие такого:
А 11-ю вернуть как было. Наверное, так даже правильнее. |
| Автор: DioNiR 8.4.2007, 02:23 | ||||||||||
Ну если вместо моего:
Вставить твой:
То будет ошибка:
Иммено на это строке. Если моё изменить и вставить вместо:
Твоё:
То работает без подцветки. А вообще SelenIT, куда и как вставить это я уже знаю. основы я понимаю и знаю. |
| Автор: SelenIT 8.4.2007, 02:29 |
| DioNiR, еще все работает с подцветкой (только что проверил), если в варианте, который вызывал parse error, прослешить двойную кавычку |
| Автор: DioNiR 8.4.2007, 02:34 | ||
| Вот теперь работает отлично. Кстате если спользовать твой вариант:
То он выводит не корекную подцветку. Если же использовать стандартную то всё норма. Жалко не достаточно постов у меня. Я бы поставил тебе бы + СПС тебе огромное. |