substr() mb_substr()

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

substr() mb_substr()

Сообщение Kuklovod » 2012.02.09, 18:41

Добрый день. Не чего не понимаю, самые обычные функции substr() mb_substr() на выходе дают вот такое:
2012-02-09 20 36 59.png
2012-02-09 20 36 59.png (656 байт) 4685 просмотров
Кодировка Утф-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 » 2012.02.09, 18:56

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

Re: substr() mb_substr()

Сообщение TM123 » 2012.02.10, 10:06

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

Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: substr() mb_substr()

Сообщение timlar » 2012.02.11, 08:38

TM123 писал(а):С не английскими буквами в UTF8 надо использовать mb_ аналоги и никак иначе!!!
Или ждать PHP 5.4 ;)
Twitter: @timlar_ua

Аватара пользователя
Kuklovod
Сообщения: 211
Зарегистрирован: 2011.11.22, 08:15

Re: substr() mb_substr()

Сообщение Kuklovod » 2012.02.11, 09:05

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

Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: substr() mb_substr()

Сообщение Caveman » 2012.02.11, 10:15

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

TM123
Сообщения: 604
Зарегистрирован: 2011.06.09, 11:18

Re: substr() mb_substr()

Сообщение TM123 » 2012.02.13, 14:56

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

Sasha_ch
Сообщения: 77
Зарегистрирован: 2011.04.10, 15:59
Откуда: Киев

Re: substr() mb_substr()

Сообщение Sasha_ch » 2012.02.13, 23:10

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

TM123
Сообщения: 604
Зарегистрирован: 2011.06.09, 11:18

Re: substr() mb_substr()

Сообщение TM123 » 2012.02.14, 09:52

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

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

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

Re: substr() mb_substr()

Сообщение Stamm » 2012.02.14, 13:26

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

Аватара пользователя
resurtm
Сообщения: 299
Зарегистрирован: 2010.12.19, 09:13
Откуда: Казахстан, Алма-Ата
Контактная информация:

Re: substr() mb_substr()

Сообщение resurtm » 2012.02.14, 13:27

Сборная солянка для тех, кто не хочет лезть в 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'); // указать нужную зону 

Ответить