substr() mb_substr()

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
Kuklovod
Сообщения: 211
Зарегистрирован: 2011.11.22, 08:15

substr() mb_substr()

Сообщение Kuklovod »

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

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

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

Re: substr() mb_substr()

Сообщение 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') 
))
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: substr() mb_substr()

Сообщение TM123 »

А вы собственно знаете отличие этих функций. Вы используете кодировку UTF8, но при этом используете для формирования первого инициала функцию которая работает с однобайтными символами и берет она соответственно первый байт первого символа чем вы в дальнейшем и создаете себе проблемы. С не английскими буквами в UTF8 надо использовать mb_ аналоги и никак иначе!!!
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: substr() mb_substr()

Сообщение timlar »

TM123 писал(а):С не английскими буквами в UTF8 надо использовать mb_ аналоги и никак иначе!!!
Или ждать PHP 5.4 ;)
Twitter: @timlar_ua
Аватара пользователя
Kuklovod
Сообщения: 211
Зарегистрирован: 2011.11.22, 08:15

Re: substr() mb_substr()

Сообщение Kuklovod »

TM123 писал(а):А вы собственно знаете отличие этих функций.
Знаю. Встречался не раз с mb_ обычно все было гладко
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: substr() mb_substr()

Сообщение Caveman »

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

Re: substr() mb_substr()

Сообщение TM123 »

Встречался не раз с mb_ обычно все было гладко
Значит раньше вам просто везло что под действия ваших алгоритмов подпадали только латинские знаки, которые в UTF8 идут по одному знаку и все работает нормально и с обычными функциями.
Sasha_ch
Сообщения: 80
Зарегистрирован: 2011.04.10, 15:59
Контактная информация:

Re: substr() mb_substr()

Сообщение Sasha_ch »

Или ждать PHP 5.4
а что в нем относительно UTF какие сдвиги в лучшую сторону ожидаются? (не в курсе просто... вроде как 6-ой версии планировали, но потом прекратили ее разработку ведь)
CPU comparison platform: CPU Boss Multi language, Yii2 powered.
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: substr() mb_substr()

Сообщение TM123 »

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

Наверное это и произойдет, но все это на уровне домыслов.
Аватара пользователя
Stamm
Сообщения: 407
Зарегистрирован: 2010.03.14, 18:59
Откуда: Россия, Москва
Контактная информация:

Re: substr() mb_substr()

Сообщение Stamm »

Вот статусная таблица, в которой указаны уже переписанные функции под юникод: http://www.php.net/~scoates/unicode/ren ... c_data.php
Аватара пользователя
resurtm
Сообщения: 299
Зарегистрирован: 2010.12.19, 09:13
Откуда: Казахстан, Алма-Ата
Контактная информация:

Re: substr() mb_substr()

Сообщение 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'); // указать нужную зону 
Ответить