[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не верный вывод strlen()
Гость_Сергей
Здравствуйте, подскажите пожалуйста новичку.
Есть вот такой код:
<?php
$str = 'ab cd ef';
echo strlen($str); // Результат 8

$str = 'те к ст';
echo strlen($str); // Хотелось бы видеть результат 7, а выводит 12
?>

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

Помогите пожулуйста.



Спустя 10 минут, 35 секунд (4.05.2010 - 12:50) twin написал(а):
Функция strlen() считает именно байты, а не символы. Для многобайтных кодировок нужно mb_strlen() с указанием кодировки.

Спустя 2 минуты, 40 секунд (4.05.2010 - 12:53) zarafar написал(а):
Проблема в том что у вас данные в кодировке utf-8. Это многобайтовая кодировка.
В этой кодировке символы кодируются разным кол-вом байтов.

В вашем примере в первом случае все символы из ASCII, кодируются 1 байтом.

Во втором случае присутствуют русские символы, они кодируются 2мя байтами.
5 символов национального алфавита * 2 + 2 пробела = 12 байт.

Китайские иероглифы кодируются вообще тремя байтами, например.

Вам следует использовать ф-ции для работы со строками с приставкой mb_.

mb_strlen();

Спустя 9 минут, 11 секунд (4.05.2010 - 13:02) Guest написал(а):
Ок, спасибо огромное, получилось!
Вот кусок кода:
<?php
$str = 'текст просто текст';
echo mb_strlen($str, 'utf-8'); // Выводит 18 все супер!!!
?>

Спустя 1 день, 5 часов, 7 минут, 51 секунда (5.05.2010 - 18:10) Han написал(а):
Цитата
Проблема в том что у вас данные в кодировке utf-8. Это многобайтовая кодировка.


Если не сложно объясните что значит у вас данные. Дело в том что тока что написал код который считает символы в строке. Строка на русском но почему то у меня она считается нормально а у другого человека 1 символ за 2? Какая между нами разница? И почему то у меня функция mb_strlen() не хочет работать как не крути

Спустя 12 минут, 31 секунда (5.05.2010 - 18:23) Michael написал(а):
В кодировке utf-8 кириллица занимает 2 байта и такие строки надо обрабатывать с помощью функций библиотеки mb_string. Эту библиотеку еще нужно включить в php, т.к. по умолчанию возможно отключена.

Спустя 33 минуты, 56 секунд (5.05.2010 - 18:57) Han написал(а):
Нет я о том, что у меня в строке "Пиво" функция strlen() выводит 4, а у человека 8. Вот я и думаю почему у него строку принимает как UTF-8 а у меня по другому. Посмотрел phpinfo() и начал подозревать что это из за того что у меня кодировки по умолчанию windows-1251,utf-8;q=0.7,*;q=0.7 а у него наверное только utf-8.

Кстате на счёт функций с работой многобайтовых строк. в пхп ини изменил строку ;extension=php_mbstring.dll на extension=php_mbstring.dll. Как я понимаю я её раскоментировал а функции всё равно не пашут(

Спустя 47 минут, 45 секунд (5.05.2010 - 19:44) Michael написал(а):
Han, надо еще длл-ку в папку с расширениями скопировать. Поищи тут на форуме не раз обсуждалось.
Цитата

"Пиво" функция strlen() выводит 4

так значит у тебя строка не в утф. Сохрани файл как утф и увидишь, что возвратит.

Спустя 31 минута, 49 секунд (5.05.2010 - 20:16) Han написал(а):
Так я файл в утф не сохраняю у меня расширение ПХП. Я не пойму почему у человека http://phpforum.ru/index.php?showtopic=28555&hl= не получается.


Кстате есть еще понятие внутреняя кодировка єто что значит?

Спустя 8 месяцев, 8 дней, 14 часов, 24 минуты, 29 секунд (14.01.2011 - 11:41) Guest написал(а):
что значит <br> в php

Спустя 1 минута, 33 секунды (14.01.2011 - 11:42) linker написал(а):
<br> в PHP ничего не значит, читай мануал по HTML.

Спустя 18 минут, 34 секунды (14.01.2011 - 12:01) Guest написал(а):
А вот так
echo ''Введите число: Snum \n<br>/''

что?

Спустя 5 минут, 52 секунды (14.01.2011 - 12:07) linker написал(а):
Еще раз повторяю, что <br> - это HTML-тэг, и к PHP имеет такое же отношения как я к полетам на марс.

Спустя 2 дня, 9 часов, 23 минуты, 14 секунд (16.01.2011 - 21:30) Dron19 написал(а):
что бы считались символы, то вот для тебя функцию написал

function numbers($string) {
$array = str_split($string);
return count($array);
}

Спустя 1 минута, 19 секунд (16.01.2011 - 21:31) Dron19 написал(а):

$str = 'те к ст';
function numbers($string) {
$array = str_split($string);
return sizeof($array);
}
echo numbers($str);

Выдает 7 вне зависимости от кодировки. Пользуйся наздоровье =)

Спустя 9 дней, 54 минуты, 45 секунд (25.01.2011 - 22:26) Termin написал(а):
Цитата
$str = 'те к ст';
function numbers($string) {
$array = str_split($string);
return sizeof($array);
}
echo numbers($str);


Выдает 7 вне зависимости от кодировки. Пользуйся наздоровье =)

Куда эту функцию вставить?

Спустя 9 часов, 16 минут, 28 секунд (26.01.2011 - 07:42) Dron19 написал(а):
К себе на страницу smile.gif и уже сам вызывать numbers и передавать ж. Аргументом строки.

Спустя 2 часа, 22 минуты, 56 секунд (26.01.2011 - 10:05) Termin написал(а):
Понял wink.gif
Быстрый ответ:

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