Есть вот такой код:
<?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();
В этой кодировке символы кодируются разным кол-вом байтов.
В вашем примере в первом случае все символы из 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 все супер!!!
?>
Вот кусок кода:
<?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. Как я понимаю я её раскоментировал а функции всё равно не пашут(
Кстате на счёт функций с работой многобайтовых строк. в пхп ини изменил строку ;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>/''
что?
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 написал(а):
К себе на страницу и уже сам вызывать numbers и передавать ж. Аргументом строки.
Спустя 2 часа, 22 минуты, 56 секунд (26.01.2011 - 10:05) Termin написал(а):
Понял