Проблема с подсчетом символов в строке на русском (на английском всё ок)

solomon-p

Новичок
Проблема с подсчетом символов в строке на русском (на английском всё ок)

Такая проблема: в текстовых строках на английском и на русском языках по-разному определяет длину строк - не могу понять в чем тут дело и как с этим справиться.

Вот кусочек кода:
PHP:
$slovo_eng='disconnected';
$len_e=strlen($slovo_eng);
$two_e=substr($slovo_eng, 0, 3); 
echo $slovo_eng." (тут ".$len_e." букв, первые три буквы - ".$two_e.")<p>";

$slovo_rus='регламентирована';
$len_r=strlen($slovo_rus);
$two_r=substr($slovo_rus, 0, 3); 
echo $slovo_rus." (тут ".$len_r." букв, первые три буквы - ".$two_r.")<p>";
Выдаёт:
PHP:
disconnected (тут 12 букв, первые три буквы - dis)

регламентирована (тут 32 букв, первые три буквы - рЪ)
Стоит все на Денвере, PHP Version 4.4.4, Apache Version Apache/1.3.33 (Win32) PHP/4.4.4

Почему так и что делать?
 

FlexIDK

Новичок
попробуй вначале добавить
header("Content-Type: text/html; charset=windows-1251");


кодировка в пхп не та стоит скорее всего...
у мя работает)))
 

solomon-p

Новичок
Да, у меня UTF-8.
А когда добавляю в код

header("Content-Type: text/html; charset=windows-1251");

оно мне пишет:

Warning: Cannot modify header information - headers already sent by (output started at z:\home\textoz\www\naf.php:1) in z:\home\textoz\www\naf.php on line 2
 

Z-Ghost

Новичок
strlen не работатет на кодировке UTF-8? ка впрочем и во всех других utf....

наиболее простой способ:

$length = strlen(utf8_decode($s));

а вообще в комментах много советов по этому поводу http://ru2.php.net/manual/ru/function.strlen.php
 

Zetruger

ivan.chistyakov.name
если PHP файл в UTF-8 то сохраняй его без сигнатура BOM

если строки в UTF-8 то длинну можно получить

echo mb_strlen('Привет', 'UTF-8')

-~{}~ 19.07.07 14:08:

Автор оригинала: Z-Ghost
strlen не работатет на кодировке UTF-8? ка впрочем и во всех других utf....

наиболее простой способ:

$length = strlen(utf8_decode($s));

а вообще в комментах много советов по этому поводу http://ru2.php.net/manual/ru/function.strlen.php
по поводу tf8_decode результат может быть не предсказуемый для русских строк ибо Returns the ISO-8859-1 translation of data

ЗЫ хотя длина скорее всего будет верной
 

SiMM

Новичок
> хотя длина скорее всего будет верной
PHP:
$str = implode('',range("\0","\xFF"));
$str = iconv('CP1251','UTF-8',$str);
echo strlen(utf8_decode($str)); // 152
или
PHP:
$str = implode('',range("а","я")).implode('',range('А','Я')).'Ёё';
$str = iconv('CP1251','UTF-8',$str);
echo strlen(utf8_decode($str)); // 66
 

solomon-p

Новичок
Всем спасибо.
Буду изучать вышеуказанные ссылки.

А пока выход нашелся наипростейший - не использовать юникод.
Я просто пересохранил php-шный и текстовой файл в другом формате (ANSI) и все заработало.
 
Сверху