Страница 1 из 1

substr() mb_substr()

Добавлено: 2012.02.09, 18:41
Kuklovod
Добрый день. Не чего не понимаю, самые обычные функции substr() mb_substr() на выходе дают вот такое:
2012-02-09 20 36 59.png
2012-02-09 20 36 59.png (656 байт) 7088 просмотров
Кодировка Утф-8. Вот код

Код: Выделить всё

            // Сокращенные ФИО
            $name = explode(' ',$model->sellerBrokerFio);
            //print_r($name);
            $name = $name[0].' '.substr($name[1],0,1).'.'.mb_substr($name[2],0,1).'.'; 
задача - вывести первые буквы имени и отчества.
В чем может быть проблема? mbstring на сервере включен.

Re: substr() mb_substr()

Добавлено: 2012.02.09, 18:56
Kuklovod
Kuklovod писал(а):Добрый день. Не чего не понимаю, самые обычные функции substr() mb_substr() на выходе дают вот такое:
2012-02-09 20 36 59.png
Кодировка Утф-8. Вот код

Код: Выделить всё

            // Сокращенные ФИО
            $name = explode(' ',$model->sellerBrokerFio);
            //print_r($name);
            $name = $name[0].' '.substr($name[1],0,1).'.'.mb_substr($name[2],0,1).'.';
задача - вывести первые буквы имени и отчества.
В чем может быть проблема? mbstring на сервере включен.

Код: Выделить всё

mb_substr($name[1],0,1,'utf-8') 
))

Re: substr() mb_substr()

Добавлено: 2012.02.10, 10:06
TM123
А вы собственно знаете отличие этих функций. Вы используете кодировку UTF8, но при этом используете для формирования первого инициала функцию которая работает с однобайтными символами и берет она соответственно первый байт первого символа чем вы в дальнейшем и создаете себе проблемы. С не английскими буквами в UTF8 надо использовать mb_ аналоги и никак иначе!!!

Re: substr() mb_substr()

Добавлено: 2012.02.11, 08:38
timlar
TM123 писал(а):С не английскими буквами в UTF8 надо использовать mb_ аналоги и никак иначе!!!
Или ждать PHP 5.4 ;)

Re: substr() mb_substr()

Добавлено: 2012.02.11, 09:05
Kuklovod
TM123 писал(а):А вы собственно знаете отличие этих функций.
Знаю. Встречался не раз с mb_ обычно все было гладко

Re: substr() mb_substr()

Добавлено: 2012.02.11, 10:15
Caveman
Kuklovod писал(а):
TM123 писал(а):А вы собственно знаете отличие этих функций.
Знаю. Встречался не раз с mb_ обычно все было гладко
Проверьте настройки mbstring в php.ini .
Бывало так же пока не устанавливал mbstring.internal_encoding = UTF-8

Re: substr() mb_substr()

Добавлено: 2012.02.13, 14:56
TM123
Встречался не раз с mb_ обычно все было гладко
Значит раньше вам просто везло что под действия ваших алгоритмов подпадали только латинские знаки, которые в UTF8 идут по одному знаку и все работает нормально и с обычными функциями.

Re: substr() mb_substr()

Добавлено: 2012.02.13, 23:10
Sasha_ch
Или ждать PHP 5.4
а что в нем относительно UTF какие сдвиги в лучшую сторону ожидаются? (не в курсе просто... вроде как 6-ой версии планировали, но потом прекратили ее разработку ведь)

Re: substr() mb_substr()

Добавлено: 2012.02.14, 09:52
TM123
Ну мне кажется что на уровне интерпретатора байткода не составляет труда определить у тебя строка мультибайт или нет и уже автоматически подцеплять нужную разновидность строковой функции, а не заставлять программера все время это помнить, где нужно mb_ а где нет.

Наверное это и произойдет, но все это на уровне домыслов.

Re: substr() mb_substr()

Добавлено: 2012.02.14, 13:26
Stamm
Вот статусная таблица, в которой указаны уже переписанные функции под юникод: http://www.php.net/~scoates/unicode/ren ... c_data.php

Re: substr() mb_substr()

Добавлено: 2012.02.14, 13:27
resurtm
Сборная солянка для тех, кто не хочет лезть в php.ini (юзаем в бутстрапе):

Код: Выделить всё

mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
mb_http_input('UTF-8');
mb_http_output('UTF-8');
setlocale(LC_ALL,'ru_RU.UTF-8');
setlocale(LC_NUMERIC,'en_US.UTF-8');
date_default_timezone_set('Asia/Almaty'); // указать нужную зону