Почему не работает поиск через strpos()?

xintrea

Новичок
Давненько я не трогал PHP...

И вот сейчас наткнулся на такую вещь. Следующий простейший код не срабатывает:
Код:
<?php

$text='Thе best wоmеn fоr sеx in уour town: https://jtbtigers.com/272a1';
$stopWord='for sеx';

if(strpos($text, $stopWord)!==false)
{
  echo 'Block!';
}

?>
То есть, в консоль строка "Block" не выводится.

Если же $stopWord сделать 'for' или 'sex', то поиск срабатывает.

Читаю документацию по strpos() - ничего про пробельные символы не сказано. Вроде как функция должна тупо находить подстроку. Но не находит. Почему?
 

WMix

герр M:)ller
Партнер клуба
Код:
php > if(strpos('Thе best wоmеn fоr sеx in уour town', 'fоr sеx') !== false){
php {   echo 'Block!';
php { }
Block!
ищи проблему у себя
 

xintrea

Новичок
В PHP нельзя работать с переменными, содержащими строки? Нужно писать содержимое строк по месту? Что за дичь?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Строки разные)

PS: еще раз пожалуешься просто так - сошлем на плюк ;)
 

Фанат

oncle terrible
Команда форума
Не находит оно по отдельности. Ни for, ни sex.
В смысле нормальный секс, а не те извращения, которые в этом объявлении написаны
 

WMix

герр M:)ller
Партнер клуба
В PHP нельзя работать с переменными, содержащими строки? Нужно писать содержимое строк по месту? Что за дичь?
я просто показал что работает, а почему у тебя нет, тупишь видать.
А что конкретно надо искать?
ошибку, что еще!
 

fixxxer

К.О.
Партнер клуба
Код:
$ hexdump -C 1.php
00000000  3c 3f 70 68 70 0a 0a 0a  0a 24 74 65 78 74 3d 27  |<?php....$text='|
00000010 54 68 d0 b5 20 62 65 73 74 20 77 d0 be 6d d0 b5 |Th.. best w..m..|
00000020 6e 20 66 d0 be 72 20 73 d0 b5 78 20 69 6e 20 d1 |n f..r s..x in .|
00000030 83 6f 75 72 20 74 6f 77 6e 3a 20 68 74 74 70 73 |.our town: https|
00000040 3a 2f 2f 6a 74 62 74 69 67 65 72 73 2e 63 6f 6d |://jtbtigers.com|
00000050 2f 32 37 32 61 31 27 3b 0a 24 73 74 6f 70 57 6f |/272a1';.$stopWo|
00000060 72 64 3d 27 66 6f 72 20 73 d0 b5 78 27 3b 0a 0a |rd='for s..x';..|
00000070 69 66 28 73 74 72 70 6f 73 28 24 74 65 78 74 2c |if(strpos($text,|
00000080 20 24 73 74 6f 70 57 6f 72 64 29 21 3d 3d 66 61 | $stopWord)!==fa|
00000090 6c 73 65 29 0a 7b 0a 20 20 65 63 68 6f 20 27 42 |lse).{. echo 'B|
000000a0 6c 6f 63 6b 21 27 3b 0a 7d 0a |lock!';.}.|
 

xintrea

Новичок
Строки разные)
Да, там русские символы затесались. Строки взяты из реального спама. Я думал, что спаммеры прокачивают свои ссылки на соседние ключевые слова типа "women", "sex", а они просто прокачивают свои ссылки, а ключевики специально искажают.

PS: еще раз пожалуешься просто так - сошлем на плюк ;)
Можете ссылать меня уже сейчас, толку от сообщений WMix в стиле "ищи проблему у себя" нет никакого.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Сослан...

PS: если ты решил подойти к вопросу спама именно вот так - сравнивая строчки, то спешу тебя огорчить, это путь в никуда. Самое оптимальное это строить защиту от них на основе SBL/StopForumSpam и прочих подобных сервисов. Но даже в этом случае не будет 100% защиты от индусов на аутсорсе за 2 бакса в день.
 

xintrea

Новичок
StopForumSpam уже давно прикручен. Это дополнительный этап фильтрации по ключевикам, у меня там ~250 слов, фраз, и регэкспов.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Нерабочий вариант, сорян))) Там между символами может быть любой непечатный символ и твой метод обломится
 

weregod

unserializer
так-то можно непечатные символы перед проверками фильтрануть тоже
 
Сверху