iconv_strlen
В отличие от strlen() , iconv_strlen() учитывает кодировку строки. Длина string не обязательно будет соответствовать количеству байт в ней, так как в различных кодировках различные символы кодируются различным количеством байт, например, юникод может быть и двух-, и четырёхбайтным.
Список параметров
Если параметр encoding опущен, предполагается, что кодировка строки string эквивалентна значению iconv.internal_encoding.
Возвращаемые значения
Возвращает количество символов в string как целое число или false в случае возникновения ошибки при кодировании.
Список изменений
Смотрите также
- grapheme_strlen() — Получает длину строки в единицах графемы
- mb_strlen() — Получает длину строки
- strlen() — Возвращает длину строки
User Contributed Notes 2 notes
If iconv_strlen is passed a UTF-8 string containing badly formed sequences, it will return FALSE. This is in contrast to mb_strlen of the behaviour of utf8_decode, which strip out any bad sequences;
# UTF-8 string containing bad sequence: \xe9
$str = «I?t?rn?ti?n\xe9?liz?ti?n» ;
print «mb_strlen: » . mb_strlen ( $str , ‘UTF-8’ ). «\n» ;
print «strlen/utf8_decode: » . strlen ( utf8_decode ( $str )). «\n» ;
print «iconv_strlen: » . iconv_strlen ( $str , ‘UTF-8’ ). «\n» ;
?>
Displays;
mb_strlen: 20
strlen/utf8_decode: 20
iconv_strlen:
As such it is being «stricter» than mb_strlen and it may mean you need to check for invalid sequences first. A quick way to check is to exploit the behaviour of the PCRE extension (see notes on pattern modifiers);
if ( preg_match ( ‘/^./us’ , $str , $ar ) != 1 ) die( «string contains invalid UTF-8» );
>
?>
A slower but stricter check (regex) can be found at: http://www.w3.org/International/questions/qa-forms-utf-8
Similiar applies to iconv_substr, iconv_strpos and iconv_strrpos
Notice there is a disconnect:
>If charset`parameter is omitted, str is assumed to be encoded in iconv.internal_encoding.
But clicking on the iconv.internal_encoding link (https://www.php.net/manual/en/iconv.configuration.php), the docs indicate that iconv.internal_encoding is deprecated since 5.6.
- Функции iconv
- iconv_get_encoding
- iconv_mime_decode_headers
- iconv_mime_decode
- iconv_mime_encode
- iconv_set_encoding
- iconv_strlen
- iconv_strpos
- iconv_strrpos
- iconv_substr
- iconv
- ob_iconv_handler
str_word_count
Подсчитывает количество слов, входящих в строку string. Если необязательный аргумент format не передан, возвращается целое число, равное количеству слов. В случае, если аргумент format передан, возвращается массив, содержимое которого зависит от значения этого аргумента. Ниже описаны допустимые значения аргумента format и соответствующие им возвращаемые значения.
- 0 – возвращает количество найденных слов
- 1 — возвращается массив, содержащий все слова, входящие в строку string.
- 2 — возвращается массив, индексами которого являются позиции в строке, а значениями — соответствующие слова.
Эта функция считает словами последовательности алфавитных символов, возможно, включающие, но не начинающихся с «‘» и «-«. Набор символов, считающихся алфавитными, зависит от текущей локали.
Пример 1. Пример использования str_word_count()
$str = "Hello friend, you're looking good today!"; $a = str_word_count($str, 1); $b = str_word_count($str, 2); $c = str_word_count($str); print_r($a); print_r($b); echo $c;
Array ( [0] => Hello [1] => friend [2] => you’re [3] => looking [4] => good [5] => today ) Array ( [0] => Hello [6] => friend [14] => you’re [29] => looking [46] => good [51] => today ) 6
Чтобы заставить функцию работать правильно с русскими буквами нужно прописать в charlist все кириллические символы, причём и верхним и нижним регистром.
Таким образом, наша функция должна выглядеть так:
str_word_count($str,0,”АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя”)
Немного подумав, можно укоротить эту строчку. В таблице ASCII все русские буквы (кроме “Ё” и “ё”) имеют коды с 192 по 256. Также, у нас есть функция chr(), которая возвращает символ по его коду. Можно сделать простой цикл, который сам запишет в переменную буквы русского алфавита. Понадобится ещё функция iconv(), чтобы перевести текст из кодировки utf-8 в cp1251, так как в utf-8 другие коды символов.
$abc=iconv( 'cp1251', 'utf-8', $abc); //Переводим строку из кодировки utf-8 в сз1251 echo 'Количество слов в тексте: ', str_word_count($text,0,$abc);?>
Получилось не намного короче, зато более логично. Мы же всё таки программированием занимаемся. В итоге наш код будет выглядеть так:
','Количество символов без пробелов: ' , mb_strlen($text_nonspace, 'utf-8'); for ( $i = 192; $i < 256; $i++ ) $abc=iconv( 'cp1251', 'utf-8', $abc); echo '
','Количество слов в тексте: ', str_word_count($text,0,$abc); ?>