всем привет! Пишу для самообразования что-то вроде гостевой книги. Вопрос по валидации данных. гуглояндекс предлагает Код (Text): $msg = htmlspecialchars(stripslashes($_POST[msg])); // обрабатываем сообщение Потом Код (Text): $out = str_replace(':-)','<img src="smileys/1.png">',$msg); И так для каждого смайлика. Кстати, может есть другие варианты для например 5 смайликов разных? Все время дергать str_replace не накладно ли по времени? Но я тут вычитал, что есть такая НЯшная функция filter_var(); Как правильнее? В моем случает какой вид примет строка первая? Добавлено спустя 4 минуты 18 секунд: FА, по смайлам нашел, что можно работать сразу с двумя массивами, например $smail и $grafic Код (Text): $out = str_replace($smail, $grafic, $text); Но опять же, не долго ли это?
это распространённый и глупый ответ. =) зачем ты это делаешь? что тебя пугает в строке? ты боишься буковок? закорючек? Экранируют всегда ради какой-то цели, чтобы избежать вполне конкретных проблем. Для этого существуют разные функции. Поэтому они и разные.
хм, спасибо за понятный и развернутый ответ. Попробую пояснить немного. входящую от юзера строку я собираюсь писать в БД, соответстченно опасаюсь, что в этой строке будут какие-нибудь SQL штуки, которые будут обработаны и выполнены как запрос (sql inject, так это называется?). Далее хотелось бы избавиться от всякого рода < и > , тэгов и прочего мусора. Оставить только текст и смайлики. Возможно я не должным образом читал гуглояндекс по этому вопросу, пошлите меня куда-нибудь по делу
все строки которые ты собираешься пихать в бд надо обработать чемнить экранирующим типа mysql_real_escape_string если ты собираешься выводить текст юзера на html странице - htmlspecialchars но не перед помещением в бд, а перед выводом на страницу. ты читал может и правильно. но не надо бояться заранее. усё будет хорошо. в каком большинстве каких случаев?
все правильно) Код (Text): $message[$i] = str_replace(array(":)","))","=)"),"<img src=\"/smiles/1.png\">", $message[$i]); $message[$i] = str_replace(array(":(","((","=("),"<img src=\"/smiles/2.png\">", $message[$i]); $message[$i] = str_replace(array("8-)","8)"),"<img src=\"/smiles/3.png\">", $message[$i]); $message[$i] = str_replace(array(":-D",":D","=D"),"<img src=\"/smiles/4.png\">", $message[$i]); $message[$i] = str_replace(":'(","<img src=\"/smiles/5.png\">", $message[$i]); $message[$i] = str_replace(array("]:->","]:>"),"<img src=\"/smiles/6.png\">", $message[$i]); $message[$i] = str_replace(array("O:-)","О:-)"),"<img src=\"/smiles/7.png\">", $message[$i]); $message[$i] = str_replace(array("*DRINK*"),"<img src=\"/smiles/8.png\">", $message[$i]); $message[$i] = str_replace(array(":-P",":P","=P"),"<img src=\"/smiles/9.png\">", $message[$i]); $message[$i] = str_replace(array(":-*",":*","=*"),"<img src=\"/smiles/10.png\">", $message[$i]); $message[$i] = str_replace(array(":-[",":["),"<img src=\"/smiles/11.png\">", $message[$i]); $message[$i] = str_replace(array("*HEART*"),"<img src=\"/smiles/12.png\">", $message[$i]); $message[$i] = str_replace(array(";-)",";)"),"<img src=\"/smiles/13.png\">", $message[$i]); $message[$i] = str_replace(array("@]->--","@}->--"),"<img src=\"/smiles/14.png\">", $message[$i]); $message[$i] = str_replace(array("*HI*"),"<img src=\"/smiles/15.png\">", $message[$i]); $message[$i] = str_replace(array("=-O"),"<img src=\"/smiles/16.png\">", $message[$i]); $message[$i] = str_replace(array("*INLOVE*"),"<img src=\"/smiles/17.png\">", $message[$i]); $message[$i] = str_replace(array(">:o",">:-o"),"<img src=\"/smiles/18.png\">", $message[$i]); $message[$i] = str_replace(array("%)","%-)"),"<img src=\"/smiles/19.png\">", $message[$i]); $message[$i] = str_replace(array("*THUMBS DOWN*"),"<img src=\"/smiles/20.png\">", $message[$i]); $message[$i] = str_replace(array("*THUMBS UP*"),"<img src=\"/smiles/21.png\">", $message[$i]); $message[$i] = str_replace(array("]:)"),"<img src=\"/smiles/22.png\">", $message[$i]); $message[$i] = str_replace(array("*GOLD*"),"<img src=\"/smiles/23.png\">", $message[$i]); $message[$i] = str_replace(array("*SWORDS*"),"<img src=\"/smiles/24.png\">", $message[$i]); $message[$i] = str_replace(array("*SHIELD*"),"<img src=\"/smiles/25.png\">", $message[$i]); $message[$i] = str_replace(array("*CASTLE*"),"<img src=\"/smiles/26.png\">", $message[$i]);
То есть я перед запихиванием в БД делаю Код (Text): $out=mysql_real_escape_string($_POST[msg]); $out -> в БД А если я хочу строку полученную вывести, то я делаю Код (Text): $string = htmlspecialchars($string); # Затем смайлы $string = str_replace($smail, $grafic, $string); # а потом echo $string; так?
$_POST[msg] нужно брать в ' ' Код (PHP): $out=isset($_POST['msg'])?$_POST['msg']:''; $out=mysql_real_escape_string($out);
Код (PHP): define('msg','msg'); //isset($variable[,mixed... $variable]) if(isset($_POST[msg])) { $msg=$_POST[msg]; } =(((
Дак будет еще лишняя проверка, а без этого нельзя убрать " undefined constant ", когда будет написано без ' '. Он выдаст предупреждение и пойдет дальше проверять. Тогда будет предупреждение Notice, о том что переменная не была определена ранее.
Чет я вашпе не в курил, тока ща заметил. Зачем так много?), функция str_replace принимает массивы в обоих случаях. Зачем епаться с экранированием двойной кавычки, если можно поместить строку в одинарные кавычки?