mb_stripos - не находит подстроки в UTF-8

frenzy

Новичок
Помогите пожалуйста разобраться почему mb_stripos не находит подстроку, если указать кодировку UTF-8?
Есть простой код:
PHP:
<?php
$text = "Если length отрицательный, то будет отброшено указанное этим аргументом число символов с конца строки string. Если при этом позиция начала подстроки, определяемая аргументом start, находится в отброшенной части строки, возвращается пустая строка.";
$array_of_words = array ('length', 'аргумент', 'Части');

var_dump($array_of_words);
print opt($text, $array_of_words);

function opt($text, $array_of_words, $encoding = "UTF-8"){
    $textlen = mb_strlen($text, $encoding);
    foreach ( $array_of_words as $key => $keyword){
        $offset = 0;
        $keywordtlen = mb_strlen($keyword, $encoding);
            $offset = mb_stripos($text, $keyword,$encoding);
            var_dump($offset);
            var_dump($keyword);
            var_dump($keywordtlen);
    }
    var_dump($textlen);
    return $text;
}

?>
$offset везде false. Если поставить $offset = mb_stripos($text, $keyword);, то работает, но позицию находит не правильно естессно.
Файл прилагаю: сохранял в npp "UTF-8 без BOM".
Запускал на OpenServer 5.1.1, php 5.3, 5.4 и на удаленном хосте под линью - результат один.
default_charset = "UTF-8" в php.ini и mb_internal_encoding("UTF-8"); ничего не меняет.
 

Вложения

frenzy

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

AnrDaemon

Продвинутый новичок
А он и не должен отличаться в два раза. В UTF8 символы представляются переменным количеством байт. От одного до четырёх.
И ещё конечно зависит от того, что ты хочешь сделать в итоге.
Если просто определить наличие вхождения и скопировать часть строки "от забора до обеда", то можно использовать любой набор функций. Если нужно извлечь три символа из середины - придётся импользовать mb_* варианты.
 

frenzy

Новичок
Дык вот именно, что второй вариант. Стал бы я заморачиваться иначе? Но в общем-то на мой вопрос отетили я и со всем разобрался.
 
Сверху