Дурная работа strlen (PHP)

12
DI
На сайте с 03.01.2007
Offline
123
#11

dkameleon, +1

Нужно пользоваться либо mb_strlen(), либо писать свои функции. Я как-то давно нашел такую для одного проекта, вот, выдернул:


function strlen_utf8 ($str)
{
$i = 0;
$count = 0;
$len = strlen ($str);
while ($i < $len)
{
$chr = ord ($str[$i]);
$count++;
$i++;
if ($i >= $len)
break;

if ($chr & 0x80)
{
$chr <<= 1;
while ($chr & 0x80)
{
$i++;
$chr <<= 1;
}
}
}
return $count;
}

Копирайт не мой.

Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
Николай В.
На сайте с 07.09.2006
Offline
62
#12

А еще можно написать в .htaccess что-то вроде:

php_value default_charset UTF-8

php_value mbstring.func_overload 7

php_value mbstring.internal_encoding UTF-8

php_value mbstring.detect_order UTF-8

и использовать базовый strlen()

dkameleon
На сайте с 09.12.2005
Offline
386
#13
Artisan:
Это здесь при чем?

хотел написать "чарсетами". Которые по крайней мере у меня всегда ассоциируются с однобайтовыми кодировками.

Дизайн интерьера (http://balabukha.com/)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий