Php str split utf 8

Дополнительные функции 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] => е // )

Источник

Читайте также:  Jquery css несколько свойств

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

    Источник

Оцените статью