Как правильно искать подстроку, без учёта регистра, в utf-8, на русском языке

MrAgr3ssive

Новичок
Я заметил такую хрень, что функция stripos (без учёта регистра) даёт неправильный результат например в таком случае (при нахождении подстроки начиная с первого символа строки):

PHP:
$str="Ошибка";
$needle="ош";
$pos = stripos($str, $needle);
Значение $pos должно быть в этом случае === 0, а оно ПУСТОЕ

тогда как функция strpos (с учётом регистра) ищет правильно (так как задумано):

PHP:
$str="Ошибка";
$needle="Ош";
$pos = strpos($str, $needle);
и $pos === 0

Использую php 5.3.6

Как решить проблему? Или как обходить?

Мне нужно для поиска по полям товаров в интернет магазине, а там полно ситуаций, когда набирают в рандомном регистре и совпадение с нужными полями начинается с первого символа........
 

AmdY

Пью пиво
Команда форума
используй функции для работы с юникодом, mb_*
 

MrAgr3ssive

Новичок
Ха, прикол в том что для mb_stripos я наблюдаю тот же самый косяк

PHP:
$str="Ошибка";
$needle="ош";
$pos = mb_stripos($str, $needle);
Значение $pos должно быть === 0, а оно и в этом случае ПУСТОЕ
 

AmdY

Пью пиво
Команда форума
MrAgr3ssive
int mb_stripos ( string $haystack , string $needle [, int $offset [, string $encoding ]] )
 
Сверху