Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите в обнаружении ошибки
 
 автор: exkluzive   (28.03.2009 в 17:38)   письмо автору
 
 

Заполняю текстовое поле с название "name".
Задача: нужно почистить переменную от хтмл кода:

function proverka ($x) 
{
   $x=wordwrap($x,35,' ',1);
   $x=str_replace(" ",' ',$x);
   $x=str_replace("&",'&',$x);
   $x=str_replace(">",'>',$x);
   $x=str_replace("<",'&lt;',$x);
   $x=str_replace("\"",'&quot;',$x);
   $x=preg_replace("/\n\n/",'<p>',$x);
   $x=preg_replace("/\n/",'<br>',$x);
   $x=preg_replace("/\\\$/",'&#036;',$x);
   $x=preg_replace("/\r/",'',$x);
   $x=stripslashes($x);
   $x=preg_replace("/\\\/",'&#092;',$x);
   $x=str_replace("\r\n","<br> ",$x);
   $x=str_replace("\n\n",'<p>',$x);
   $x=str_replace("\n",'<br> ',$x);
   do {$x=str_replace("<br><br><br>","<br>",$x);} while (preg_match("/<br><br><br><br>/i",$x)); Вырезаем 3 и более ентеров
   do {$x=str_replace("   "," ",$x);} while (preg_match("/   /i",$x));// Вырезаем 3 и более пробелов подряд
   $x=str_replace("\t",' ',$x);
   $x=str_replace("\r",' ',$x);
   $x=str_replace('   ',' ',$x);
   return $x;
}

$add_name=proverka($_POST['name']);


Записываем в БД переменную и видим, что хтмл код присутствует ((
Для текстовых областей (textarea) всё работает.
Проверка для текстовых полей (input) не работает, немогу понять почему?

  Ответить  
 
 автор: Николай2357   (28.03.2009 в 21:25)   письмо автору
 
   для: exkluzive   (28.03.2009 в 17:38)
 

В текстовых полях не бывает переносов строки. А зачем так мудрено, strip_tags() не подходит?

  Ответить  
 
 автор: exkluzive   (28.03.2009 в 23:28)   письмо автору
 
   для: Николай2357   (28.03.2009 в 21:25)
 

Не помагает. По прежнему в БД записывается хтмл код... (

$add_name=strip_tags($_POST['nam']);

  Ответить  
 
 автор: Николай2357   (29.03.2009 в 01:15)   письмо автору
 
   для: exkluzive   (28.03.2009 в 23:28)
 

Что подразумевается под "хтмл код"? Если теги, то эта функция почистит всё от них, кроме того, что в стилях и в скриптах. А если нужно вывести всё как есть, то тогда htmlspecialchars().

  Ответить  
 
 автор: Сергей1988   (29.03.2009 в 03:19)   письмо автору
 
   для: Николай2357   (29.03.2009 в 01:15)
 

A еще можно с помощью регулярных выражений запретить ввод каких-либо левых символов, сделать проверку.

if (ereg('[^a-zA-Zа-яА-Я0-9_]',$_POST ['name'])) {echo ('иди на х**!');}

  Ответить  
 
 автор: nikita2206   (29.03.2009 в 11:35)   письмо автору
 
   для: Сергей1988   (29.03.2009 в 03:19)
 

А точку тогда юзер несможет поставить.
Можно так порезать:
<?
$name 
preg_replace('/(<.+?>)/'NULLaddslashes($_POST['name']));

  Ответить  
 
 автор: Сергей1988   (29.03.2009 в 03:16)   письмо автору
 
   для: exkluzive   (28.03.2009 в 23:28)
 

Надо внимательней быть... $_POST['name'];

  Ответить  
 
 автор: exkluzive   (29.03.2009 в 17:39)   письмо автору
 
   для: Николай2357   (28.03.2009 в 21:25)
 

Ё маё !!! Была проблема с хостом, изменения не работали, теперь всё работает! $add_name=strip_tags($_POST['name']); - как раз то, что нужно. Огромное спасибо всем, кто принимал участие в обсуждении темы. Я узнал о других, более простых способах обезопаситься от вводимого юзером хтмл кода ))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования