Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Экранирование метасимволов
я вот не силен в этой математической функции (просто наверное не приходилось использовать часто), однако! знак доллара как минимум экранируются \$
одним слешем. Не двумя! а у вас как я понял идет экран от самой функции(разделитель)
и в первом случае для "$" его нету во втором случае аж два!
Может меня подправят дурака сам такой же. учусь. (Добавление)
vintag пишет:
rafaello9 пишет:
Здравствуйте!
Есть обычный текст, который содержит знак $$$ в смысле доллары. Надо проверить этот текст на наличие этого символа. Для этого пишем так:
я вот не силен в этой математической функции (просто наверное не приходилось использовать часто), однако! знак доллара как минимум экранируются \$
одним слешем. Не двумя! а у вас как я понял идет экран от самой функции(разделитель)
и в первом случае для "$" его нету во втором случае аж два!
Может меня подправят дурака сам такой же. учусь.
В любом случае код этого знака - \$.
andrewkard
Отправлено: 20 Ноября, 2015 - 10:25:11
Участник
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2011
Помог: 0 раз(а)
[quote=andrewkard][/quote]
Спасибо, andrewkard!
Я забыл сказать, что в силу определенных обстоятельств, необходимо использовать только preg_match и никакую другую.
Имеется очень громадный список спам-слов и текст отправляемых писем проверяется программно на присутствие спам-слов через функцию preg_match Не могу же я одно слово проверять одной ф-цией, другое другой....
Мелкий
Отправлено: 20 Ноября, 2015 - 13:03:33
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
"%\\\$\\\$\\\$%iu"
или
'%\\$\\$\\$%iu'
На первый взгляд неочевидно.
Символ $ - спецсимвол с точки зрения PCRE, поэтому его надо экранировать. Т.е. регулярка должна быть: %\$\$\$%iu
Далее вопрос, как объяснить парсеру PHP, какую именно строку мы хотим получить.
В одинарных кавычках символ \ является спецсимволом, его экранировать надо. А вот $ в одинарных кавычках специального значения не имеет, и если написать '\\\$', то парсер PHP увидит строку \\$
В двойных же кавычках спецсимволом является и \ и $ - поэтому пишется сначала экранированный \\, затем экранированный \$
Скорей всего вам будет полезна функция preg_quote.
rafaello9 пишет:
Не могу же я одно слово проверять одной ф-цией, другое другой....
Почему нет?
----- PostgreSQL DBA
MiksIr
Отправлено: 20 Ноября, 2015 - 14:45:21
Забанен
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
В общем Мелкий прав, но небольшие дополнения.
Во-первых, в регуляках просто не нужно использовать двойные кавычки. Это спасет от многих ошибок.
С одинарными кавычками - второй слеш не обязателен. Хотя документация говорит про то, что слеш нужно писать двойным, но ровно там же в примерах - есть пример с одинарным. И это хорошо.
Т.е. '%\$\$\$%iu' вполне будет работать.
preg_quote - это хорошо, что бы квотировать переменные с данными. В регулярках же есть дургой способ - \Q \E
Т.е. '%\Q$$$\E%iu'
----- self-banned
rafaello9
Отправлено: 25 Ноября, 2015 - 10:19:38
Новичок
Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2011
Помог: 0 раз(а)
Дабы не открывать новую тему, хочу спросить здесь же еще кое о чем.
Производим проверку текста письма на спам слова. Для этого используется:
array('%\bЗаказ\b%ui','Содержит слово \'Заказ\'','0.9'),
array('%\bзаколоть\b%ui','Содержит слово \'заколоть\'','1.1'),
array('%\bзалупа\b%ui','Содержит слово \'залупа\'','0.6'),
array('%\bзасирать\b%ui','Содержит слово \'засирать\'','0.7'),
.......);
Получается интересная ситуация. Если я сам лично ввожу со своего компьютера и текст письма и ввожу данные в переменную $category, то все отрабатывает на ура. Но если другой пользователь, используя этот скрипт через интернет, через свой компьютер вводит текст письма, то проверка происходит через раз, какие то слова проверяются, а какие то просто игнорируются....
Получается, что здесь замешан тот факт, что шрифты у разных компьютеров разные, и поэтому во втором случае выходят осечки при проверке.
Как можно избежать этого момента?
Спасибо.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.