За последние 24 часа нас посетили 22720 программистов и 1265 роботов. Сейчас ищут 782 программиста ...

Codeigniter 3 - POST фильтрация

Тема в разделе "PHP для профи", создана пользователем rex751, 22 июн 2017.

  1. rex751

    rex751 Новичок

    С нами с:
    22 июн 2017
    Сообщения:
    10
    Симпатии:
    0
    Работаю Codeigniter 3 (PHP 7)
    Ситуация такая:
    Пользователь вводит в форму некий контент с html разметкой, данные сохраняются в базе.
    Затем скрипт парсит страницу и сравнивает контент находящийся в базе с контентом на странице.
    И вот тут меня ждал сюрприз, данные записанные в базу напрямую, отличаются от тех же данных сохраненных через форму, соответственно с спарсенной страницей совпадают только данные записанные на прямую в базу.
    Я так понимаю, работает фильтрация, и мне надо спарсенные данные подвергнуть той же фильтрации, что и через форму, но как вызвать эту фильтрацию не для post?
    пробовал так $this->security->xss_clean(), фильтрует больше чем надо.
    Исходная длинна строки 5301 , после формы 5307, после xss_clean 5259

    Может кто знает подскажите, буду признателен.
     
  2. rex751

    rex751 Новичок

    С нами с:
    22 июн 2017
    Сообщения:
    10
    Симпатии:
    0
    Разбил контент по строкам что бы увидеть в чем отличия и вот что вышло
    Код (Text):
    1. string(106) "<p><strong>2. Соединение с репозиторием через терминал. </strong></p>"
    2. string(105) "<p><strong>2. Соединение с репозиторием через терминал. </strong></p>"
    Первая строка через парсер, вторая та же, но сохраненная через форму в базу.
    Отличие на один символ, но на какой, не могу понять. В чем разница?
     
  3. gruth

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

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Мб дело в кодировке или конец строки отрубает или перевод строки..а что за парсер? У винды и unix недопонимания на счет \n\r
     
  4. rex751

    rex751 Новичок

    С нами с:
    22 июн 2017
    Сообщения:
    10
    Симпатии:
    0
    Чем отличается, нашел, сделал обоим строкам urlencode и увидел что в в спарсенных данных иногда присутствовали неразрывные пробелы код%C2%A0, а сохраненном тексте через форму, их не было, поэтому сделал так

    PHP:
    1. $pars_content = str_replace("\xc2\xa0", ' ', $pars_content);
    2. $pars_content = preg_replace('/\\r\\n?|\\n/', '\n', $pars_content);
    а для текста из базы
    PHP:
    1. $text = preg_replace('/\\r\\n?|\\n/', '\n',$text);
    И всё заработало. Интересно проще решение есть?
     
  5. gruth

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

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Получается ведь в любом случае \r\n будет отрезаться. \\r\\n? этого хватит. а в случае замены если в одинарных кавычках '\n' преобразуется в перевод?
    Не преобразуется. Видимо все переносы на символы \n заменяешь. У тебя точно все работает?
     
    #5 gruth, 23 июн 2017
    Последнее редактирование: 23 июн 2017
  6. rex751

    rex751 Новичок

    С нами с:
    22 июн 2017
    Сообщения:
    10
    Симпатии:
    0
    Проверял пока на нескольких страницах, работает, но есть опасения, если отличается эта пара символов, то не появиться ли страница, где будут другие символы отличаться? Чую, то что я написал, это костыли, надо как то сделать то же, что происходит с текстом при записи через форму, пока не понимаю как и что... Если кто знает подскажите.
     
  7. gruth

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

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    В нетбианс можно гулять по коду кликая по функциям/классам и т.д. Найти там метод котрый режет строку ну и разобрать что к чему
     
    denis01 нравится это.
  8. rex751

    rex751 Новичок

    С нами с:
    22 июн 2017
    Сообщения:
    10
    Симпатии:
    0
    Пока последний вариант
    PHP:
    1. $pars_content = str_replace("\xc2\xa0", ' ', $pars_content);
    2.         $page['base_content'] = str_replace("\xc2\xa0", ' ', $page['base_content']);
    3.         $page['base_content'] = str_replace("\r", '', $page['base_content']);
    Код %C2%A0 встречается и в одних и в других данных но не всегда совпадает.