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 :: Регулярки и разные шрифты
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, то все отрабатывает на ура. Но если другой пользователь, используя этот скрипт через интернет, через свой компьютер вводит текст письма, то проверка происходит через раз, какие то слова проверяются, а какие то просто игнорируются....
Получается, что здесь замешан тот факт, что шрифты у разных компьютеров разные, и поэтому во втором случае выходят осечки при проверке.
Как можно избежать этого момента? Неужели дело в шрифтах?
Есть какой то способ при сохранении текста письма приводить его к единому виду?
Спасибо.
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
rafaello9 пишет:
Получается, что здесь замешан тот факт, что шрифты у разных компьютеров разные
оригинальненько но мимо
из журнала должно быть ясно, что дело в кодировке
Use utf-8, Luke
----- Чем больше узнаю, тем больше я не знаю.
rafaello9
Отправлено: 25 Ноября, 2015 - 17:54:46
Новичок
Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2011
Помог: 0 раз(а)
Цитата:
из журнала должно быть ясно, что дело в кодировке
Дело в том, что я не могу же контролировать любого пользователя, который заходит через интернет и создает/сохраняет новое письмо.
Это что же получается, что пользователь вводит русский текст, а он сохраняется не в той кодировке? Или как это понять?
Ведь я же в самом начале определил вопрос так: если я ввожу и сохраняю текст, то все отрабатывает, а если вводит текст (русский) другой пользователь, то у него отрабатывает через раз, одно слово видит, другое не видит... (Добавление)
Только сейчас допер....:
Это что же получается, что хитрые пользователи заменяют хотя-бы одну букву (например, в слове "заработать" "а" русское на "а" латинское, или "р" русское на "р" латинское), чтобы их письмо сохранилось в базу данных со спам-словом, которое нужно им?
Вот это да, ну и хитрецы....
И при проверке слова "заработать", содержащее набор из русских и латинских букв и выдает эту самую ошибку:
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
надо читать документацию...
Замену русских букв на латинские вы никак не предотвратите, кроме как перечислением всех вариантов, но ошибку "Compilation failed: invalid UTF-8" предотвратить можете...
----- Чем больше узнаю, тем больше я не знаю.
rafaello9
Отправлено: 26 Ноября, 2015 - 15:12:22
Новичок
Покинул форум
Сообщений всего: 28
Дата рег-ции: Июнь 2011
Помог: 0 раз(а)
Хорошо, ошибку: "Compilation failed: invalid UTF-8" я исправить постараюсь...
Но вот как быть с подменой русских букв на латинские?
Вообще это реально настроить проверку на подмену букв?
Например, как будет выглядеть регулярка для подмены букв в слове "заработать"?
Да и вообще, мне кажется, найти подмену букв - это полдела. Вот как перевести найденные латинские буквы обратно?
Спасибо!
Мелкий
Отправлено: 26 Ноября, 2015 - 16:01:44
Активный участник
Покинул форум
Сообщений всего: 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/вордфильтр
Уж если вы только сейчас сообразили про банальнейшую замену кириллицы на похожую по начертанию латинницу - бросайте эту затею.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.