|
|
|
| есть страница в utf-8
пытаюсь сосчитать кол-во символов с mb_strlen()
так эта функция и перенос строки считает за два символа
вот этот код пишет мне длину "3"
<?php
$str= "а
";
echo mb_strlen($str, "utf-8");
?>
если же написать $str ="a"; т.е. все в одной строчке тогда все в порядке
но как же сосчитать реально сколько символов в строке?
спасибо | |
|
|
|
|
|
|
|
для: sergi
(27.07.2008 в 03:05)
| | Перевод строки в большинстве случаев представлен в виде 2-х байт. В любой кодировке, включая UTF-8. Как один символ перевод строки не рассматривается, так как он в данном случае сам состоит из двух символов. Управляющих. Возврат каретки и собственно перенос.
Но вот что возврат каретки забыл в XXI веке, сказать правда трудно. | |
|
|
|
|
|
|
|
для: BinLaden
(27.07.2008 в 04:12)
| | ok, это конечно все мило что перенос строки и возврат каретки занимают два байта,
НО сосчитать реально символы можно или нет? Без кареток | |
|
|
|
|
|
|
|
для: Sergi
(27.07.2008 в 04:30)
| | Замени все знаки переноса и возврата каретки на пустую стоку с помощью функции str_replace. А дальше считай количество. | |
|
|
|
|
|
|
|
для: Sergi
(27.07.2008 в 04:30)
| | Он тебе и показывает сколько РЕАЛЬНО символов, а не сколько ты видишь ;)
Ты определись что тебе нужно. Только буквы? Или буквы с пробелами? Или переносы строки тоже нужны? И если не нужны переносы, то какие именно, в конце строки, или в середине тоже?
<?
$a=trim($a); # убирает переносы строк и пробелы ТОЛЬКО ПО КРАЯМ переменной
# то есть в начале и в конце
$a = str_replace("\r\n", "", $a); # убирает переносы строки windows
$a = str_replace("\n", "", $a); # убирает переносы строки unix
$a = str_replace(" ", "", $a); # убиает пробелы
?>
|
вроде так. | |
|
|
|
|
|
|
|
для: Sergi
(27.07.2008 в 04:30)
| | > НО сосчитать реально символы можно или нет?
С чего Вы вообще взяли, что перевод строки - это вообще символ, раз уж на то пошло? | |
|
|
|
|
|
|
|
для: BinLaden
(27.07.2008 в 15:13)
| | Конечно отхожу от темы, но вопрос по работе utf8 с функцией strtr(). Если я передаю русский текст в кодировке utf8 этой функции то получаются каракули. Как сделать, чтобы эта функция правильно отрабатывала? | |
|
|
|
|
|
|
|
для: FireTiger
(28.07.2008 в 18:22)
| | немного пошевелил мозгами, придумал немного громоздкое, но рабочее решение, прошу оценить:
<?php
$letters = array("а" => "a", "б" => "b", "в" => "v", "г" => "g", "д" => "d", "е" =>
"e", "ё" => "yo", "ж" => "g", "з" => "z", "и" => "i", "й" => "y", "к" => "k",
"л" => "l", "м" => "m", "н" => "n", "о" => "o", "п" => "p", "р" => "r", "с" =>
"s", "т" => "t", "у" => "u", "ф" => "f", "х" => "h", "ц" => "ts", "ч" => "ch",
"ш" => "sh", "щ" => "shch", "ъ" => "", "ы" => "i", "ь" => "", "э" => "e", "ю" =>
"yu", "я" => "ya");
$var = mb_strtolower($var);
$var = strtr($var, $letters);
?>
|
Может кому-то пригодится ;) | |
|
|
|