Работаю Codeigniter 3 (PHP 7) Ситуация такая: Пользователь вводит в форму некий контент с html разметкой, данные сохраняются в базе. Затем скрипт парсит страницу и сравнивает контент находящийся в базе с контентом на странице. И вот тут меня ждал сюрприз, данные записанные в базу напрямую, отличаются от тех же данных сохраненных через форму, соответственно с спарсенной страницей совпадают только данные записанные на прямую в базу. Я так понимаю, работает фильтрация, и мне надо спарсенные данные подвергнуть той же фильтрации, что и через форму, но как вызвать эту фильтрацию не для post? пробовал так $this->security->xss_clean(), фильтрует больше чем надо. Исходная длинна строки 5301 , после формы 5307, после xss_clean 5259 Может кто знает подскажите, буду признателен.
Разбил контент по строкам что бы увидеть в чем отличия и вот что вышло Код (Text): string(106) "<p><strong>2. Соединение с репозиторием через терминал. </strong></p>" string(105) "<p><strong>2. Соединение с репозиторием через терминал. </strong></p>" Первая строка через парсер, вторая та же, но сохраненная через форму в базу. Отличие на один символ, но на какой, не могу понять. В чем разница?
Мб дело в кодировке или конец строки отрубает или перевод строки..а что за парсер? У винды и unix недопонимания на счет \n\r
Чем отличается, нашел, сделал обоим строкам urlencode и увидел что в в спарсенных данных иногда присутствовали неразрывные пробелы код%C2%A0, а сохраненном тексте через форму, их не было, поэтому сделал так PHP: $pars_content = str_replace("\xc2\xa0", ' ', $pars_content); $pars_content = preg_replace('/\\r\\n?|\\n/', '\n', $pars_content); а для текста из базы PHP: $text = preg_replace('/\\r\\n?|\\n/', '\n',$text); И всё заработало. Интересно проще решение есть?
Получается ведь в любом случае \r\n будет отрезаться. \\r\\n? этого хватит. а в случае замены если в одинарных кавычках '\n' преобразуется в перевод? Не преобразуется. Видимо все переносы на символы \n заменяешь. У тебя точно все работает?
Проверял пока на нескольких страницах, работает, но есть опасения, если отличается эта пара символов, то не появиться ли страница, где будут другие символы отличаться? Чую, то что я написал, это костыли, надо как то сделать то же, что происходит с текстом при записи через форму, пока не понимаю как и что... Если кто знает подскажите.
В нетбианс можно гулять по коду кликая по функциям/классам и т.д. Найти там метод котрый режет строку ну и разобрать что к чему
Пока последний вариант PHP: $pars_content = str_replace("\xc2\xa0", ' ', $pars_content); $page['base_content'] = str_replace("\xc2\xa0", ' ', $page['base_content']); $page['base_content'] = str_replace("\r", '', $page['base_content']); Код %C2%A0 встречается и в одних и в других данных но не всегда совпадает.