Ситуация: разминаюсь в написании скриптов, задача стояла так написать аналог strlen-а только не используя его самого ... Есть код: Код (Text): function MyStrLen($string){ $string_array=str_split($string); $count=0; foreach ($string_array as $n){ echo $n."<br>"; $count++; } echo "\t\t\tВ строке: <b>".$string."</b> содержится <b>".$count."</b> символов.\n"; } MyStrLen("vasya pupkin"); MyStrLen("vyzyzyzyzyzyzyzyz"); Все работает, но!!! Как всегда но!!! Если пишу в $string по русски то он выдает белиберду, а по англицки все в порядке ... Мозгом понимаю что это связано с кодировкой. Вопрос ..., как сделать так чтоб и по русски он считал правильно количество символов ... На вопрос почему не использовать просто strlen предложу прочитать все сообщение с начала, и обратить на слова о том что разминаюсь в алгоритмике.
При внесении "Ц" - 2 символа вместо 1 При внесении "Вася Пупкин" вместо "vasya pupkin" - 21 вместо 12 ... Мне это напомнило набор СМС в телефоне ..., при наборе в транслитерации латиницей разрешенное количество символов больше нежели при наборе в русском ...
вот только можно было использовать count() вместо foreach. а можно было использовать preg_match вообще. а не правильно, видимо это ровно в 2 раза больше чем символов? потому что каждый русский симвл в кодировке utf-8 занимает 2 байта. А функция разбивает по 1. можете указать вторым параметром 2 - тогда английские по 2 станут)
Код (Text): $string_array=mb_split('.', $string); - результат такой же ... Это связано с кодировкой ..., нужно разобраться с кодировкой символов ... Но как не знаю ... Как сделать так чтоб он сплитил в нужной мне кодировке???
PHP: function MyStrLen($string){ $string_array = mb_split('.', $string); $count = count($string_array); echo "\t\t\tВ строке: <b>".$string."</b> содержится <b>".$count."</b> символов.\n"; } MyStrLen("vasya pupkin"); MyStrLen("екыпцфв ау"); HTML: В строке: vasya pupkin содержится 13 символов. В строке: екыпцфв ау содержится 11 символов. хех, на 1 больше
Тогда вот так PHP: function MyStrLen($string){ $count = preg_match_all('/./u', $string, $match); echo "\t\t\tВ строке: <b>".$string."</b> содержится <b>".$count."</b> символов.\n"; } MyStrLen("vasya pupkin"); MyStrLen("екыпцфв ау"); и без u - если не в utf-8
Ну так вы пишите скрипт, он же у вас сохранён в какой то кодировке, вот и посмотрите. В любом случае если весь сайт написан в UTF то при передачи в него случайно cp1251 вы должны будите перекодировать этот текст в нужную кодировку, и так же на оборот.