- Дополнительные функции mb_string
- mb_ucfirst
- mb_substr_replace
- mb_invert_case
- mb_str_pad
- mb_str_split
- Результат работы функции:
- mb_str_split
- Список параметров
- Возвращаемые значения
- Список изменений
- Смотрите также
- User Contributed Notes 3 notes
- str_split
- Ошибки
- Список изменений
- Примеры
- Примечания
- Смотрите также
- User Contributed Notes 3 notes
- Php str split utf 8
- Разбить текст на кириллице с помощью str_split -> utf — 8
- Разбить текст с помощью preg_split
- Как разбить английский текст на символы с помощью preg_split
- Пример разделения строки на английском языке на символы
Дополнительные функции mb_string
Как известно строковые функции PHP не правильно работают с русским текстом в кодировке UTF-8. Чтобы решить эту проблему предполагается использовать функции mb_string , но тут проблема полностью не решается т.к. некоторых функций в нем нет. Далее представлены недостающие функции и примеры их работы.
mb_ucfirst
Первый символ строки в верхний регистр, аналог функции ucfirst() .
if (!function_exists('mb_ucfirst')) < function mb_ucfirst($str, $enc = 'utf-8') < return mb_strtoupper(mb_substr($str, 0, 1, $enc), $enc) . mb_substr($str, 1, mb_strlen($str, $enc), $enc); >>
echo ucfirst('русский текст'); // русский текст echo mb_ucfirst('русский текст'); // Русский текст
mb_substr_replace
Замена части строки, аналог функции substr_replace() .
if (!function_exists('mb_substr_replace')) < function mb_substr_replace($original, $replacement, $position, $length) < $startString = mb_substr($original, 0, $position, 'UTF-8'); $endString = mb_substr($original, $position + $length, mb_strlen($original), 'UTF-8'); $out = $startString . $replacement . $endString; return $out; >>
echo substr_replace('Предложение на русском языке', 'английском', 15, 7); // Предлож�английском на русском языке echo mb_substr_replace('Предложение на русском языке', 'английском', 15, 7); // Предложение на английском языке
mb_invert_case
function mb_invert_case($s) < $o = ''; foreach (preg_split('/(?return $o; >
echo mb_invert_case('предложение'); // ПРЕДЛОЖЕНИЕ echo mb_invert_case('ПРЕДЛОЖЕНИЕ'); // предложение
mb_str_pad
Дополнение строки, другой строкой, до заданной длины. Аналог функции str_pad() .
function mb_str_pad($input, $pad_length, $pad_string = ' ', $pad_type = STR_PAD_RIGHT)
mb_str_split
Функция преобразует строку в массив. В PHP mb_str_split появилась с версии 7.4.
if (!function_exists('mb_str_split')) < function mb_str_split($str, $l = 0) < if ($l >0) < $ret = array(); $len = mb_strlen($str, "UTF-8"); for ($i = 0; $i < $len; $i += $l) < $ret[] = mb_substr($str, $i, $l, "UTF-8"); >return $ret; > return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY); > >
Результат работы функции:
$array = str_split('предложение'); print_r($array); // Array // ( // [0] => � // [1] => � // [2] => � // [3] => � // [4] => � // [5] => � // [6] => � // [7] => � // [8] => � // [9] => � // [10] => � // [11] => � // [12] => � // [13] => � // [14] => � // [15] => � // [16] => � // [17] => � // [18] => � // [19] => � // [20] => � // [21] => � // ) $array = mb_str_split('предложение'); print_r($array); // Array // ( // [0] => п // [1] => р // [2] => е // [3] => д // [4] => л // [5] => о // [6] => ж // [7] => е // [8] => н // [9] => и // [10] => е // )
mb_str_split
Функция вернёт массив строк, это версия str_split() с поддержкой кодировок переменного размера символов, а также кодировок фиксированного размера из 1, 2 или 4-байтовых символов. Если указан параметр length , строка разбивается на куски указанной длины в символах (не байтах). Может быть указан необязательный параметр encoding , это хорошая практика.
Список параметров
Строка ( string ) для разделения на символы или куски.
Если указано, каждый элемент возвращаемого массива будет состоять из нескольких символов вместо одного символа.
Параметр encoding представляет собой символьную кодировку. Если он опущен или равен null , вместо него будет использовано значение внутренней кодировки.
Строка, указывающая одну из поддерживаемых кодировок.
Возвращаемые значения
mb_str_split() возвращает массив строк.
Список изменений
Версия | Описание |
---|---|
8.0.0 | Теперь параметр encoding может принимать значение null . |
8.0.0 | Функция больше не возвращает false в случае неудачи. |
Смотрите также
User Contributed Notes 3 notes
Note: function return NULL if can’t convert argument type.
if (! in_array ( $encoding , mb_list_encodings (), true )) static $aliases ;
if ( $aliases === null ) $aliases = [];
foreach ( mb_list_encodings () as $encoding ) $encoding_aliases = mb_encoding_aliases ( $encoding );
if ( $encoding_aliases ) foreach ( $encoding_aliases as $alias ) $aliases [] = $alias ;
>
>
>
>
if (! in_array ( $encoding , $aliases , true )) trigger_error ( ‘mb_str_split(): Unknown encoding «‘ . $encoding . ‘»‘ , E_USER_WARNING );
return null ;
>
>
$result = [];
$length = mb_strlen ( $string , $encoding );
for ( $i = 0 ; $i < $length ; $i += $split_length ) $result [] = mb_substr ( $string , $i , $split_length , $encoding );
>
return $result ;
>
?>
if( !function_exists(‘mb_str_split’)) <
function mb_str_split( $string = », $length = 1 , $encoding = null ) <
if(!empty($string)) <
$split = array();
$mb_strlen = mb_strlen($string,$encoding);
for($pi = 0; $pi < $mb_strlen; $pi += $length)<
$substr = mb_substr($string, $pi,$length,$encoding);
if( !empty($substr)) <
$split[] = $substr;
>
>
>
return $split;
>
>
Lazy polyfill for UTF-8 only:
function utf8_str_split(string $input, int $splitLength = 1)
$re = \sprintf(‘/\\G.+/us’, $splitLength);
\preg_match_all($re, $input, $m);
return $m[0];
>
- Функции для работы с многобайтовыми строками
- mb_check_encoding
- mb_chr
- mb_convert_case
- mb_convert_encoding
- mb_convert_kana
- mb_convert_variables
- mb_decode_mimeheader
- mb_decode_numericentity
- mb_detect_encoding
- mb_detect_order
- mb_encode_mimeheader
- mb_encode_numericentity
- mb_encoding_aliases
- mb_ereg_match
- mb_ereg_replace_callback
- mb_ereg_replace
- mb_ereg_search_getpos
- mb_ereg_search_getregs
- mb_ereg_search_init
- mb_ereg_search_pos
- mb_ereg_search_regs
- mb_ereg_search_setpos
- mb_ereg_search
- mb_ereg
- mb_eregi_replace
- mb_eregi
- mb_get_info
- mb_http_input
- mb_http_output
- mb_internal_encoding
- mb_language
- mb_list_encodings
- mb_ord
- mb_output_handler
- mb_parse_str
- mb_preferred_mime_name
- mb_regex_encoding
- mb_regex_set_options
- mb_scrub
- mb_send_mail
- mb_split
- mb_str_split
- mb_strcut
- mb_strimwidth
- mb_stripos
- mb_stristr
- mb_strlen
- mb_strpos
- mb_strrchr
- mb_strrichr
- mb_strripos
- mb_strrpos
- mb_strstr
- mb_strtolower
- mb_strtoupper
- mb_strwidth
- mb_substitute_character
- mb_substr_count
- mb_substr
str_split
Если указан необязательный параметр length , возвращаемый массив будет разбит на фрагменты, каждый из которых будет иметь длину length , за исключением последнего фрагмента, который может быть короче, если строка делится неравномерно. По умолчанию параметр length равен 1 , то есть размер каждого фрагмента будет один байт.
Ошибки
Если параметр length меньше 1 , будет выброшена ошибка ValueError .
Список изменений
Версия Описание 8.2.0 Если параметр string не задан, теперь возвращается пустой массив ( array ). Ранее возвращался массив ( array ), содержащий одну пустую строку 8.0.0 Теперь если параметр length меньше 1 , будет выброшена ошибка ValueError ; ранее, вместо этого выдавалась ошибка уровня E_WARNING , а функция возвращала false . Примеры
Пример #1 Пример использования str_split()
$arr1 = str_split ( $str );
$arr2 = str_split ( $str , 3 );print_r ( $arr1 );
print_r ( $arr2 );Результат выполнения данного примера:
Array ( [0] => H [1] => e [2] => l [3] => l [4] => o [5] => [6] => F [7] => r [8] => i [9] => e [10] => n [11] => d ) Array ( [0] => Hel [1] => lo [2] => Fri [3] => end )
Примечания
Замечание:
Функция str_split() производит разбивку по байтам, а не по символам, в случае использования строк в многобайтных кодировках. Используйте функцию mb_str_split() , чтобы разбить строку на кодовые точки.
Смотрите также
- mb_str_split() — Если задана многобайтовая строка возвращает массив символов
- chunk_split() — Разбивает строку на фрагменты
- preg_split() — Разбивает строку по регулярному выражению
- explode() — Разбивает строку с помощью разделителя
- count_chars() — Возвращает информацию о символах, входящих в строку
- str_word_count() — Возвращает информацию о словах, входящих в строку
- for
User Contributed Notes 3 notes
The function str_split() is not ‘aware’ of words. Here is an adaptation of str_split() that is ‘word-aware’.
$array = str_split_word_aware (
‘In the beginning God created the heaven and the earth. And the earth was without form, and void; and darkness was upon the face of the deep.’ ,
32
);/**
* This function is similar to str_split() but this function keeps words intact; it never splits through a word.
*
* @return array
*/
function str_split_word_aware ( string $string , int $maxLengthOfLine ): array
if ( $maxLengthOfLine <= 0 ) throw new RuntimeException ( sprintf ( 'The function %s() must have a max length of line at least greater than one' , __FUNCTION__ ));
>$lines = [];
$words = explode ( ‘ ‘ , $string );$currentLine = » ;
$lineAccumulator = » ;
foreach ( $words as $currentWord )$currentWordWithSpace = sprintf ( ‘%s ‘ , $currentWord );
$lineAccumulator .= $currentWordWithSpace ;
if ( strlen ( $lineAccumulator ) < $maxLengthOfLine ) $currentLine = $lineAccumulator ;
continue;
>// Overwrite the current line and accumulator with the current word
$currentLine = $currentWordWithSpace ;
$lineAccumulator = $currentWordWithSpace ;
>if ( $currentLine !== » ) $lines [] = $currentLine ;
>array( 5 ) [ 0 ]=> string ( 29 ) «In the beginning God created »
[ 1 ]=> string ( 30 ) «the heaven and the earth. And »
[ 2 ]=> string ( 28 ) «the earth was without form, »
[ 3 ]=> string ( 27 ) «and void; and darkness was »
[ 4 ]=> string ( 27 ) «upon the face of the deep. »
>Php str split utf 8
Если у вас windows-1251, то и для кириллицы этот способ вполне рабочий!
Разбить текст на кириллице с помощью str_split -> utf — 8
Как разбить/разделить текст на кириллице с помощью str_split, нам нужно проверить таким же образом, какой результаты будет выводить var_dump
Например буква P русского алфавита в кодировке UTF-8 покажет через var_dump():
Как вы поняли. str_split для кириллицы в UTF-8 по умолчанию не подойдет! Нам нужно. преобразовать строку из UTF-8 в windows-125 :
Если мы выведем здесь вот такой вариант разделения текста на символы:
print_r(iconv(«UTF-8», «windows-1251», $text));
Как можно такой результат понять!? Вот так будет отображаться текст, кодировку которого не переваривает кодировка страницы. Мы немного писали о кодировке -> здесь
Что делать!?Нам нужно каждую букву обратно перекодировать в UTF-8, это можно сделать в цикле:
$str = iconv(«UTF-8», «windows-1251», $text);
foreach (str_split($str) as $index => $value)
$переменная .= iconv(«windows-1251″,»UTF-8″, $value).»
\n»;Разбить текст с помощью preg_split
Еще один вариант разбиения строки посимвольно, который я теперь использую:
preg_split — Разбивает строку по регулярному выражению
pattern — отсутствует, поэтому «//»
u — используется кодировка UTF-8
Специальное значение limit, равное -1, подразумевает отсутствие ограничения
PREG_SPLIT_NO_EMPTY — если этот флаг указан, функция preg_split() вернет только непустые подстроки.
Возвращает массив символов.
Как разбить английский текст на символы с помощью preg_split
С теория разобрались, теперь пришло время примеров! У нас есть текст на английском языке, пропустим его через функцию preg_split и посмотрим, что получится:
print_r(preg_split(«//u», $text5 , -1, PREG_SPLIT_NO_EMPTY) ) ;
Пример разделения строки на английском языке на символы
Как видим на нашем примере, текст/строка на английском языке прекрасно разбита на символы с помощью preg_split