[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: неожидаеми резултат функции mb_strlen()
dadli
привет.

если так написать:
echo mb_strlen("щ","utf-8");

виведет: 1

а если есть фаил text.txt и он содержит толко один симбол - щ и так написатъ:

mb_strlen(file_get_contents("text.txt"),"utf-8");

виведет: 2

почему во втаром случе виведится 2 а не 1 ?



Спустя 17 минут, 11 секунд (31.08.2011 - 13:20) Игорь_Vasinsky написал(а):
mb_strlen(trim(str_replace("\r\n", "", file_get_contents("text.txt"))),"utf-8");


Спустя 18 минут, 33 секунды (31.08.2011 - 13:39) dadli написал(а):
Игорь_Vasinsky
но почемуто все ровно 2 виведетъ, а в фаиле text.txt написано толко один симбол: щ

Спустя 3 минуты, 55 секунд (31.08.2011 - 13:42) Игорь_Vasinsky написал(а):
посмотри всё так

echo nl2br(file_get_contents("text.txt"));

Спустя 7 минут, 10 секунд (31.08.2011 - 13:50) alex12060 написал(а):
dadli

Это же юникод, чего ты ожидал? :)
Попробуй вставить этот символ:



Еще прикол увидишь.

Спустя 44 секунды (31.08.2011 - 13:50) linker написал(а):
Есть непечатные символы вроде переноса строк, они также учитываются. Поэтому
file_get_contents("text.txt", FILE_IGNORE_NEW_LINES)

Спустя 1 минута, 22 секунды (31.08.2011 - 13:52) alex12060 написал(а):
Надо делать так в общем:


echo mb_strlen(file_get_contents('test.txt'), 'UTF-8');

Спустя 1 минута, 48 секунд (31.08.2011 - 13:54) Игорь_Vasinsky написал(а):
linker
да.. наверно эт и есть...

а может и файл в юникоде с BOM сохранён..

Спустя 16 минут, 16 секунд (31.08.2011 - 14:10) dadli написал(а):
Игорь_Vasinsky
виведет щ


alex12060
да юникод, но ожидал 1 потому что исползовал mb_strlen() =)
может бит ти имеел в виду strlen()
strlen("が") етот виведет: 3 =)

linker
так написал:
echo mb_strlen(file_get_contents("dinamiki.txt",FILE_IGNORE_NEW_LINES),"utf-8");

еше 2 виведет


ну спасибо всем сутъ понял,
Цитата
в конце фаила Есть непечатные символы вроде переноса строк, они также учитываются

спасибо всем

Спустя 3 минуты, 33 секунды (31.08.2011 - 14:13) dadli написал(а):
Игорь_Vasinsky
да ви прави
сохранил без бом и уже етот (как linker сказал)
echo mb_strlen(file_get_contents("text.txt",FILE_IGNORE_NEW_LINES),"utf-8");

виведет 1

Спустя 2 минуты, 50 секунд (31.08.2011 - 14:16) linker написал(а):
BOM - два байта, если мне изменяет память, а значит в результате должно получиться 3. Здесь 2, а значит скорее всего либо перенос строки, либо пробел в конце. Делать надо либо, если пробелы считаем
echo mb_strlen(file_get_contents('test.txt', FILE_IGNORE_NEW_LINES), 'UTF-8');
либо
echo mb_strlen(trim(file_get_contents('test.txt')), 'UTF-8');
если начальные и конечные пробелы не считаем. trim() удаляет также и переносы строк и табуляции и прочее.

P.S. Я так понял, что BOM таки был виноват.

Спустя 9 минут, 58 секунд (31.08.2011 - 14:26) dadli написал(а):
linker

Цитата
P.S. Я так понял, что BOM таки был виноват.


да BOM бил виноват =)


_____________


когда чарли чаплин принимал участие в конкурсе: "клон чарли чаплинов", то чарли занимал третю позицию.

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.