Подскажите, есть текст в кодировке UTF-8, например - 'привет мир', если искать позицию пробела при помощи strpos это будет 12, если при помощи mb_strpos то это будет 6, т.е. в 2 раза меньше. вот это значение - в 2 раза меньше, оно постоянно? или есть какие то символы, которые допустим будут занимать не 2 а 3 или более символа в кодировке которую использует strpos? почему меня привлекает strpos, а не mb_strpos, потому что в strpos в качество искомого значения я могу указывать как строчку, допустим '.' так и массив т.е. array('.','!','?'.. ), но при этом меня интересует длина. подскажите пожалуйста.
Нет, значение не постоянное. utf-8 - кодировка с переменным количеством байтов на символ, поэтому и приходится использовать mb_ - функции. В php 5.4 говорили о какой-то поддержке юникода стандартными функциями, но я так и не разобрался, как это включить (кстати, если кто расскажет, буду благодарен), ну, и поскольку, на серверах все ещё большей частью 5.3, а иногда даже 5.2 попадается, пользуюсь mb-функциями.
Понятно, спасибо, кстати в strpos сейчас присмотрелся, нельзя там array('.','!','?'.. ) в качестве поиска использовать, перепутал с чем то. Но все равно вопрос и ответ полезен.
mkramer, не знаю в каком контексте ты слышал про это. возможно что-то новое придумали, я не в курсе. есть уже давно т.н. перегрузка функций — говеная идея из ряда register_globals и magic_quote http://www.php.%6eet/manual/ru/mbstring.overload.php Добавлено спустя 3 минуты 46 секунд: VLK, strpbrk() посмотри
artoodetoo, http://habrahabr.ru/post/136800/. Ну и на официальном сайте тоже где-то читал, когда был релиз. Сейчас не могу найти
не состоялось пока — "неверно понятый ченджлог". фактически случился только mb_internal_encoding('UTF-8') по умолчанию.
!!! косяк найден, забыл поставить у mb_strlen 2-й параметр что то я не понимаю, есть такой код: Код (PHP): $str1 = 'ёйцукенгшщзхъфывапролджэячсмитьбю'; echo "<h3>{$str1}</h3>"; echo '<p>strlen: ' . strlen($str1) . '</p>'; echo '<p>mb_strlen: ' . mb_strlen($str1) . '</p>'; $str2 = 'ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ'; echo "<h3>{$str2}</h3>"; echo '<p>strlen: ' . strlen($str2) . '</p>'; echo '<p>mb_strlen: ' . mb_strlen($str2) . '</p>'; $str3 = ':?()-\'.,!"№;'; echo "<h3>{$str3}</h3>"; echo '<p>strlen: ' . strlen($str3) . '</p>'; echo '<p>mb_strlen: ' . mb_strlen($str3) . '</p>'; $str4 = ' '; echo "<h3>пробел</h3>"; echo '<p>strlen: ' . strlen($str4) . '</p>'; echo '<p>mb_strlen: ' . mb_strlen($str4) . '</p>'; $str5 = '1234567890'; echo "<h3>{$str5}</h3>"; echo '<p>strlen: ' . strlen($str5) . '</p>'; echo '<p>mb_strlen: ' . mb_strlen($str5) . '</p>'; а в результате длина одинаковая что у strlen, что у mb_strlen, в чем может быть прикол?
; Код (Text): mb_internal_encoding("utf-8") перед кодом, и будет ожидаемо: Скрин Хотя странно, у меня php 5.5, должно и без этого верно работать