Такая задача. У меня каждый запрос к мускулю фильтруется функцией, которая вырезает плохие слова и помещает значения в mysql_real_escape_string для экранизации символов. Так вот, я это сделал весьма печальным и кривым способом, разбивая строку на массив и добавляя уйму исключений..и пришла мысль альтернативы. Чтобы знать, какие именно строки экранировать, можно обособлять эти места любым символом(предположим,#!#). Функция должна искать все совпадения и заменять на соответствующую строку. То есть: Код (PHP): $string=preg_replace('/#!#(.*)#!#/is',mysql_real_escape_string('$1'),$str); Соответственно этот вариант не работает, тк он не отправляет запоминание, а просто строку "$1". Второй вариант: Код (PHP): $result_id = preg_match_all("/#!#([^(#!#)]*)#!#/is", $str_, $id); for($i=0; $i<$result_id; $i++){ $string_=preg_replace('/#!#([^(#!#)]*)#!#/is',mysql_real_escape_string($id[0][$i]),$str_); $string_=str_replace("#!#","",$string_); } В этом случае обособляются переменные, которые нужно обработать, далее ищем кол-во совпадений по ним, заменяем их на экранированный вариант и вставляем обратно,убирая потом лишние знаки. Но это слишком кривой(?) метод. Да и то, в нем тоже есть 1 проблема: почему-то наотрез отказывается экранировать символ \. Как пример: Код (PHP): name='#!#\'"#!#' //Строка в запросе #!#\'"#!# // найденный фрагмент в этой строке по регулярке SELECT * FROM users WHERE name='\\'\"' //Вот что выводит..то есть 1 слеш так и остается сам по себе, из-за этого в свою очередь появляется кавычка , которая портит результат Можно как-то сделать задуманное мной проще?
Модификатор e, стоит о нем прочитать но также и задуматься - чтобы дырку не сделать - ибо в строке может прийти код на выполнение, а так как вы его будете обрабатывать нужно учитывать каждый шаг. Вообщем осторожнее с ним...