strpos возвращает неправильную позицию на иврите

Мне нужна помощь... У меня есть строка php на иврите, и я хочу найти позицию подстроки. мой код:

$string = "אבגד הוזח טי";
$find = "הוזח";
$pos = strpos($string, $find);
echo $pos;

Strpos нашел подстроку, но возвращает неверное значение позиции. Он возвращает значение $pos 9 вместо 5. Почему strpos не работает в строках на иврите? Не могли бы вы мне помочь?


person igorb0214    schedule 10.04.2014    source источник
comment
вы должны использовать mb_strpos(), так как иврит многобайтовый   -  person    schedule 10.04.2014


Ответы (2)


Попробуйте использовать mb_strpos. Вам нужно будет установить внутреннюю кодировку символов на UTF-8, используя mb_internal_encoding.

mb_internal_encoding("UTF-8");
$string = "אבגד הוזח טי";
$find = "הוזח";
$pos = mb_strpos($string, $find);
echo $pos; //5
person tchow002    schedule 10.04.2014

Строки на иврите используют многобайтовые символы, поэтому каждый «символ» может состоять из 2 или более символов, а не из 1, как большинство латинских символов. Вы, вероятно, захотите изучить Функции многобайтовых строк PHP для своего приложения.

person Sunny Patel    schedule 10.04.2014
comment
На самом деле это не так. Это может быть и совсем другая кодировка. И UTF-8, и UTF-16 поддерживают символы иврита. Однако они отличаются способом хранения. Все это сильно зависит от того, в какой кодировке был сохранен файл и какая кодировка PHP настроена на использование по умолчанию (обычно через локаль). Однако предложение использовать многобайтовые функции PHP очень точное. - person Tularis; 10.04.2014
comment
Спасибо @Tularis, я уточнил свой ответ. - person Sunny Patel; 10.04.2014