Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: длина строки и юникод

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Ch_chov
Отправлено: 21 Июня, 2009 - 12:10:45
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Как правильно определять длину строки в UTF-8?
strlen и mb_strlen возвращают количество байтов, а не символов.

(Отредактировано автором: 21 Июня, 2009 - 12:11:12)

 
 Top
vitaliy_mad
Отправлено: 21 Июня, 2009 - 12:35:16
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




а если так:
mb_strlen($str,'utf8');
 
 Top
Ch_chov
Отправлено: 21 Июня, 2009 - 12:43:42
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Да, так работает!

Вот так
тоже вроде правильно определяет.
(Добавление)
Ещё можно что бы не прописывать во всех скриптах 'utf-8'
установить кодировки по умолчанию в .htaccess
для mb_string – php_value mbstring.internal_encoding UTF-8
для iconv – php_value iconv.internal_encoding UTF-8
 
 Top
JustUserR
Отправлено: 21 Июня, 2009 - 14:57:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Очень странно что PHP себя так ведет - выдает количетсво байтов
Я конечно не видел реализацию исходников mb_string но длина массива символов (Строки) остается длиной из чего бы массив не состоял


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Ch_chov
Отправлено: 21 Июня, 2009 - 15:17:41
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Наверно потому, что в отличии от C++ в PHP строка это не массив символов.
 
 Top
JustUserR
Отправлено: 21 Июня, 2009 - 18:54:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Ch_chov Кхм а PHP это самостоятельный язык первого уровня не написанный на C/C++ ? Нет конечно И все функции PHP реализованы на C++ном коде - и я не понимаю зачем было изобретать велосипед вместо того чтобы напряму вернуть длину строки


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
aldan8
Отправлено: 22 Июня, 2009 - 12:26:15
Post Id



Новичок


Покинул форум
Сообщений всего: 58
Дата рег-ции: Февр. 2009  


Помог: 0 раз(а)




У меня такой вопрос , когда используешь функцию SUBSTRING( string, 0 ,15) , например, в MySQL , она тоже символы возвращает или байты ?
Потому что у меня указана кодировка UTF8 в MySQL и когда PHP выводит их , то в конце текста иногда появляется какой то иероглиф или не понятный символ.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB