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 :: Регулярки и разные шрифты

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
rafaello9
Отправлено: 25 Ноября, 2015 - 13:42:01
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Необходимо произвести проверку текста письма на спам слова. Для этого используется:
PHP:
скопировать код в буфер обмена
  1.     foreach ($category as $rule){
  2.     if (preg_match($rule[0], $content)){
  3.     //сделай то-то....
  4.     }
  5.     }

Вот кусок кода, где собраны спам-слова:
PHP:
скопировать код в буфер обмена
  1.     $category = array (
  2.     .....
  3.     array('%\bЗаказ\b%ui','Содержит слово \'Заказ\'','0.9'),
  4.     array('%\bзаколоть\b%ui','Содержит слово \'заколоть\'','1.1'),
  5.     array('%\bзалупа\b%ui','Содержит слово \'залупа\'','0.6'),
  6.     array('%\bзасирать\b%ui','Содержит слово \'засирать\'','0.7'),
  7.     .......);

Получается интересная ситуация. Если я сам лично ввожу со своего компьютера и текст письма и ввожу данные в переменную $category, то все отрабатывает на ура. Но если другой пользователь, используя этот скрипт через интернет, через свой компьютер вводит текст письма, то проверка происходит через раз, какие то слова проверяются, а какие то просто игнорируются....
Получается, что здесь замешан тот факт, что шрифты у разных компьютеров разные, и поэтому во втором случае выходят осечки при проверке.
Как можно избежать этого момента? Неужели дело в шрифтах?
Есть какой то способ при сохранении текста письма приводить его к единому виду?
Спасибо.

При проверке журнала ошибок нашел вот это:
CODE (htmlphp):
скопировать код в буфер обмена
  1. preg_match(): Compilation failed: invalid UTF-8 string at offset 2

(Отредактировано автором: 25 Ноября, 2015 - 14:18:41)

 
 Top
DelphinPRO
Отправлено: 25 Ноября, 2015 - 16:49:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




rafaello9 пишет:
Получается, что здесь замешан тот факт, что шрифты у разных компьютеров разные

оригинальненько Улыбка но мимо

из журнала должно быть ясно, что дело в кодировке

Use utf-8, Luke


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
rafaello9
Отправлено: 25 Ноября, 2015 - 17:54:46
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Цитата:
из журнала должно быть ясно, что дело в кодировке

Дело в том, что я не могу же контролировать любого пользователя, который заходит через интернет и создает/сохраняет новое письмо.
Это что же получается, что пользователь вводит русский текст, а он сохраняется не в той кодировке? Или как это понять?

Ведь я же в самом начале определил вопрос так: если я ввожу и сохраняю текст, то все отрабатывает, а если вводит текст (русский) другой пользователь, то у него отрабатывает через раз, одно слово видит, другое не видит...
(Добавление)
Только сейчас допер....:
Это что же получается, что хитрые пользователи заменяют хотя-бы одну букву (например, в слове "заработать" "а" русское на "а" латинское, или "р" русское на "р" латинское), чтобы их письмо сохранилось в базу данных со спам-словом, которое нужно им?
Вот это да, ну и хитрецы....
И при проверке слова "заработать", содержащее набор из русских и латинских букв и выдает эту самую ошибку:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     preg_match(): Compilation failed: invalid UTF-8 string at offset 2


Если это так, то как с этим бороться?

(Отредактировано автором: 25 Ноября, 2015 - 17:57:38)

 
 Top
DelphinPRO
Отправлено: 25 Ноября, 2015 - 22:41:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




надо читать документацию...

Замену русских букв на латинские вы никак не предотвратите, кроме как перечислением всех вариантов, но ошибку "Compilation failed: invalid UTF-8" предотвратить можете...


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
rafaello9
Отправлено: 26 Ноября, 2015 - 15:12:22
Post Id


Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Хорошо, ошибку: "Compilation failed: invalid UTF-8" я исправить постараюсь...
Но вот как быть с подменой русских букв на латинские?
Вообще это реально настроить проверку на подмену букв?
Например, как будет выглядеть регулярка для подмены букв в слове "заработать"?

Да и вообще, мне кажется, найти подмену букв - это полдела. Вот как перевести найденные латинские буквы обратно?
Спасибо!
 
 Top
Мелкий Супермодератор
Отправлено: 26 Ноября, 2015 - 16:01:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




rafaello9 пишет:
preg_match(): Compilation failed: invalid UTF-8 string at offset 2

Как, надеюсь, известно, UTF несколько сложнее однобайтовых кодировок.
В отличии от кодировок фиксированной длины (1 байт как наиболее распространённый вариант), UTF имеет нефиксированную длину. А вот чтобы понимать, где три однобайтовых символа, а где один трёхбайтовый - начинаются фокусы с использованием старшего бита.
Как побочный эффект далеко не любое сочетание байтов будет являться UTF строкой. В отличии от всяких cp1251 и прочей исторической белиберды, где для любого байта найдётся свой символ.

Например, PHP5 нативно не проверяет корректность UTF, хранит строки как набор байт. А PCRE проверяет. И когда видит в регулярке невозможную для UTF8 последовательность байт, то очень обижается и отказывается работать.
Повторюсь: в регулярке. В проверяемых данных допустим любой бинарник и обработан будет корректно.

rafaello9 пишет:
проверку текста письма на спам слова

http://lurkmore[dot]to/вордфильтр
Уж если вы только сейчас сообразили про банальнейшую замену кириллицы на похожую по начертанию латинницу - бросайте эту затею.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB