|
|
|
| Здравствуйте!
подскажите, а как мне вырезать обратный слешь? То что ниже не работает
preg_replace('#(\\)*#i', '', $search);
|
В общем задача следующая. Делаю поиск, и если в тексте встречается обратный слеш, то запрос валится. Не помогает и $search = mysql_escape_string($search); А в тексте, я думаю, могут встречаться и обратные слеши(текст ищется в базе mysql), но не как не insert...
а еще с этими друзьями надо разобраться и какие еще проверки делать?
$search = preg_replace('#(UPDATE)*#i', '', $search);
$search = preg_replace('#(DELETE)*#i', '', $search);
|
в общем подскажите кто чем)
спасибо | |
|
|
|
|
|
|
|
для: Амбер
(30.08.2010 в 00:40)
| | preg_replace('#^(\\)*$#i', '', $search); попробуй так. | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(30.08.2010 в 08:50)
| | и что эта конструкция будет делать?
проверить Вы её пробовали? | |
|
|
|
|
|
|
|
для: Амбер
(30.08.2010 в 00:40)
| | а зачем?
чтобы человек слово update поискать не смог? | |
|
|
|
|
|
|
|
для: Trianon
(30.08.2010 в 10:16)
| | и как же мне поступить?, достаточно mysql_escape_real_string ? | |
|
|
|
|
|
|
|
для: Амбер
(30.08.2010 в 18:06)
| | поиск при помощи LIKE, RLIKE или MATCH ? | |
|
|
|
|
|
|
|
для: heed
(30.08.2010 в 18:42)
| | видимо он переживает за sql инъекцию )))))))) | |
|
|
|
|
|
|
|
для: heed
(30.08.2010 в 18:42)
| | Верно насчет функций,
SELECT system_catalog_position.id_position AS id_position, system_catalog_position.id_catalog
AS id_catalog, system_catalog_paragraph.name AS name, 'art' AS link FROM system_catalog_paragraph,
system_catalog_position WHERE (system_catalog_paragraph.name RLIKE 'поиск') AND
system_catalog_position.hide = 'show' AND system_catalog_paragraph.hide = 'show' AND
system_catalog_position.id_position = system_catalog_paragraph.id_position GROUP BY
system_catalog_position.id_position ORDER BY name LIMIT 0, 10
|
переживаю насчет инъекций, а кто не переживает, того уже и нет в живых)) | |
|
|
|
|
|
|
|
для: Амбер
(30.08.2010 в 19:11)
| | >paragraph.name RLIKE 'поиск'
я так понял вместо 'поиск' данные отправленные пользователями?
>и если в тексте встречается обратный слеш
лучше не разрешать пользователям вводить свои регулярные выражения в запрос :)
пропускайте только например пробелы буквы цифры и _
и можно будет даже не прибегать ко всяким preg_quote() и escape | |
|
|
|
|
|
|
|
для: heed
(30.08.2010 в 23:10)
| | "я так понял вместо 'поиск' данные отправленные пользователями?" - Верно
"пропускайте только например пробелы буквы цифры и _" если мы будем использовать это - то ссузим возможности поиска, с другой стороны зачем давать юзверям искать что то кроме существительных)
В общем вот, что я состряпал
if (strlen($_GET['name']) > $max_search_len) $error .= '<div class=\"main_txt\">Поисковая фраза слишком длинна. Постарайтесь ее ограничить до '.$max_search_len.' символов</div>';
if (strlen($_GET['name']) < $min_search_len) $error .= '<div class=\"main_txt\">Поисковая фраза слишком коротка. Попробуйте ее увеличить до '.$min_search_len.' символов</div>';
$search = substr($_GET['name'], 0, 64);
$search = addCslashes($search, '%_');
$search = addCslashes($search, '%+');
$search = addCslashes($search, '%%');
$search = mysql_real_escape_string($search);
$search = trim($search);
|
| |
|
|
|
|
|
|
|
для: Амбер
(01.09.2010 в 00:11)
| | >$search = addCslashes($search, '%_');
$search = addCslashes($search, '%+');
$search = addCslashes($search, '%%');
больше похоже на обработку для LIKE
для RLIKE подойдёт preg_quote() + mysql_escape_string()
mysql> SELECT ".." RLIKE "\\.\\."
-> ;
+-----------------------+
| ".." RLIKE "\\.\\." |
+-----------------------+
| 1 |
+-----------------------+
1 row in set (0.00 sec)
mysql> SELECT ".." RLIKE "\\\\.\\\\.";
+-------------------------+
| ".." RLIKE "\\\\.\\\\." |
+-------------------------+
| 0 |
+-------------------------+
1 row in set (0.00 sec)
| eq preg_match('#\.\.#', '..')
плюс интерпритация php слэшей в строках | |
|
|
|