За последние 24 часа нас посетили 32454 программиста и 1755 роботов. Сейчас ищут 846 программистов ...

очистить строку от лишнего

Тема в разделе "PHP для новичков", создана пользователем roversochi, 3 апр 2013.

  1. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    всем привет!
    Пишу для самообразования что-то вроде гостевой книги. Вопрос по валидации данных.
    гуглояндекс предлагает
    Код (Text):
    1. $msg = htmlspecialchars(stripslashes($_POST[msg])); // обрабатываем сообщение
    Потом
    Код (Text):
    1. $out = str_replace(':-)','<img src="smileys/1.png">',$msg);
    И так для каждого смайлика. Кстати, может есть другие варианты для например 5 смайликов разных? Все время дергать str_replace не накладно ли по времени?

    Но я тут вычитал, что есть такая НЯшная функция filter_var();
    Как правильнее? В моем случает какой вид примет строка первая?

    Добавлено спустя 4 минуты 18 секунд:
    FА, по смайлам нашел, что можно работать сразу с двумя массивами, например $smail и $grafic
    Код (Text):
    1. $out = str_replace($smail, $grafic, $text);
    Но опять же, не долго ли это?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты для чего валидируешь-то? на всяк-всяк?
     
  3. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Ага, от всякой нечистой силы, типа
    и им подобным
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    А то, что там Notice и undefined constant это никого не волнует?

    Вы такую хуйню написали...
     
  5. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    ОМG чтоэто? Я вроде пишу в "PHP для новичков". Это оказывается канал про аниме?
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это распространённый и глупый ответ. =)

    зачем ты это делаешь? что тебя пугает в строке? ты боишься буковок? закорючек?
    Экранируют всегда ради какой-то цели, чтобы избежать вполне конкретных проблем. Для этого существуют разные функции. Поэтому они и разные.
     
  7. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    хм, спасибо за понятный и развернутый ответ. Попробую пояснить немного. входящую от юзера строку я собираюсь писать в БД, соответстченно опасаюсь, что в этой строке будут какие-нибудь SQL штуки, которые будут обработаны и выполнены как запрос (sql inject, так это называется?). Далее хотелось бы избавиться от всякого рода < и > , тэгов и прочего мусора. Оставить только текст и смайлики. Возможно я не должным образом читал гуглояндекс по этому вопросу, пошлите меня куда-нибудь по делу :)
     
  8. jenya777777

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

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    используй htmlspecialchars и strip_tags. В большинстве случаев это достаточно.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    все строки которые ты собираешься пихать в бд надо обработать чемнить экранирующим типа mysql_real_escape_string
    если ты собираешься выводить текст юзера на html странице - htmlspecialchars но не перед помещением в бд, а перед выводом на страницу.

    ты читал может и правильно. но не надо бояться заранее. усё будет хорошо.

    в каком большинстве каких случаев?
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    все правильно)

    Код (Text):
    1. $message[$i] = str_replace(array(":)","))","=)"),"<img src=\"/smiles/1.png\">", $message[$i]);
    2. $message[$i] = str_replace(array(":(","((","=("),"<img src=\"/smiles/2.png\">", $message[$i]);
    3. $message[$i] = str_replace(array("8-)","8)"),"<img src=\"/smiles/3.png\">", $message[$i]);
    4. $message[$i] = str_replace(array(":-D",":D","=D"),"<img src=\"/smiles/4.png\">", $message[$i]);
    5. $message[$i] = str_replace(":'(","<img src=\"/smiles/5.png\">", $message[$i]);
    6. $message[$i] = str_replace(array("]:-&gt;","]:&gt;"),"<img src=\"/smiles/6.png\">", $message[$i]);
    7. $message[$i] = str_replace(array("O:-)","О:-)"),"<img src=\"/smiles/7.png\">", $message[$i]);
    8. $message[$i] = str_replace(array("*DRINK*"),"<img src=\"/smiles/8.png\">", $message[$i]);
    9. $message[$i] = str_replace(array(":-P",":P","=P"),"<img src=\"/smiles/9.png\">", $message[$i]);
    10. $message[$i] = str_replace(array(":-*",":*","=*"),"<img src=\"/smiles/10.png\">", $message[$i]);
    11. $message[$i] = str_replace(array(":-[",":["),"<img src=\"/smiles/11.png\">", $message[$i]);
    12. $message[$i] = str_replace(array("*HEART*"),"<img src=\"/smiles/12.png\">", $message[$i]);
    13. $message[$i] = str_replace(array(";-)",";)"),"<img src=\"/smiles/13.png\">", $message[$i]);
    14. $message[$i] = str_replace(array("@]-&gt;--","@}-&gt;--"),"<img src=\"/smiles/14.png\">", $message[$i]);
    15. $message[$i] = str_replace(array("*HI*"),"<img src=\"/smiles/15.png\">", $message[$i]);
    16. $message[$i] = str_replace(array("=-O"),"<img src=\"/smiles/16.png\">", $message[$i]);
    17. $message[$i] = str_replace(array("*INLOVE*"),"<img src=\"/smiles/17.png\">", $message[$i]);
    18. $message[$i] = str_replace(array("&gt;:o","&gt;:-o"),"<img src=\"/smiles/18.png\">", $message[$i]);
    19. $message[$i] = str_replace(array("%)","%-)"),"<img src=\"/smiles/19.png\">", $message[$i]);
    20. $message[$i] = str_replace(array("*THUMBS DOWN*"),"<img src=\"/smiles/20.png\">", $message[$i]);
    21. $message[$i] = str_replace(array("*THUMBS UP*"),"<img src=\"/smiles/21.png\">", $message[$i]);
    22. $message[$i] = str_replace(array("]:)"),"<img src=\"/smiles/22.png\">", $message[$i]);
    23. $message[$i] = str_replace(array("*GOLD*"),"<img src=\"/smiles/23.png\">", $message[$i]);
    24. $message[$i] = str_replace(array("*SWORDS*"),"<img src=\"/smiles/24.png\">", $message[$i]);
    25. $message[$i] = str_replace(array("*SHIELD*"),"<img src=\"/smiles/25.png\">", $message[$i]);
    26. $message[$i] = str_replace(array("*CASTLE*"),"<img src=\"/smiles/26.png\">", $message[$i]);
     
  11. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    То есть я перед запихиванием в БД делаю
    Код (Text):
    1. $out=mysql_real_escape_string($_POST[msg]);
    2. $out -> в БД
    А если я хочу строку полученную вывести, то я делаю
    Код (Text):
    1. $string = htmlspecialchars($string);
    2.  
    3. # Затем смайлы
    4. $string = str_replace($smail, $grafic, $string);
    5.  
    6. # а потом
    7. echo $string;
    так? :)
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    точно так.
     
  13. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    спасибо, теперь определился, куда конкретно гуглояндексить :)
     
  14. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
  15. roversochi

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

    С нами с:
    4 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    хм, спасибо. Я когда читал про оптимизацию на хабре, перепутал все %)
     
  16. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. define('msg','msg');
    2. //isset($variable[,mixed... $variable])
    3. if(isset($_POST[msg])) {
    4. $msg=$_POST[msg];
    5. } 
    =(((
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в чем грустняшка?
     
  18. r3l0c

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

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    Код (PHP):
    1. define('msg','msg');
    2. $msg=$_POST[msg]; 
    может тут?)
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    дык а зачем он это написал? =)
     
  20. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    что после дефайна можно и msg, и 'msg'
    это грустно
     
  21. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Дак будет еще лишняя проверка, а без этого нельзя убрать " undefined constant ", когда будет написано без ' '.
    Он выдаст предупреждение и пойдет дальше проверять.

    Тогда будет предупреждение Notice, о том что переменная не была определена ранее.
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну так не надо так писать и грустняшку не словишь, ведь так? я чета не вкурил.
     
  23. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    А дальше я сказал, что
    А якобы, чтобы не было предупреждений придется сделать так:

    В его случае.

    =)
     
  24. r3l0c

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

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    Чет я вашпе не в курил, тока ща заметил. Зачем так много?), функция str_replace принимает массивы в обоих случаях.
    Зачем епаться с экранированием двойной кавычки, если можно поместить строку в одинарные кавычки?
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Тут скорее фор ыч нужен