Statement on glibc/iconv Vulnerability

mb_str_split

(PHP 7 >= 7.4.0, PHP 8)

mb_str_splitPour une chaîne multi-octets donnée, renvoie un tableau de ses caractères

Description

mb_str_split(string $string, int $length = 1, ?string $encoding = null): array

Cette fonction renverra un tableau de chaînes, c'est une version de str_split() avec une prise en charge des encodages de taille de caractère variable ainsi que des encodages de taille fixe de caractères de 1, 2 ou 4 octets. Si le paramètre length est spécifié, la chaîne est décomposée en blocs de la longueur spécifiée en caractères (et non en octets). Le paramètre encoding est facultatif mais il est recommandé de le fournir.

Liste de paramètres

string

La chaîne de caractères à diviser en caractères ou en morceaux.

length

Si spécifié, chaque élément du tableau retourné sera composé de plusieurs caractères au lieu d'un seul caractère.

encoding

Le paramètre encoding est l'encodage des caractères. S'il est omis ou null, l'encodage de caractères interne sera utilisé.

Une chaîne de caractères spécifiant l'un des encodages pris en charge.

Valeurs de retour

mb_str_split() renvoie un tableau de chaînes de caractères.

Historique

Version Description
8.0.0 encoding est désormais nullable.
8.0.0 Cette fonction ne renvoie plus false en cas d'échec.

Voir aussi

  • str_split() - Convertit une chaîne de caractères en tableau

add a note

User Contributed Notes 3 notes

up
7
webmaster at redinfo dot co dot kr
1 year ago
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;
}
}
up
7
info at ensostudio dot ru
3 years ago
Note: function return NULL if can't convert argument type.

Polyfill PHP < 7.4 based on package "symfony/polyfill-mbstring":
<?php
function mb_str_split($string, $split_length = 1, $encoding = null)
{
if (
null !== $string && !\is_scalar($string) && !(\is_object($string) && \method_exists($string, '__toString'))) {
trigger_error('mb_str_split(): expects parameter 1 to be string, '.\gettype($string).' given', E_USER_WARNING);
return
null;
}
if (
null !== $split_length && !\is_bool($split_length) && !\is_numeric($split_length)) {
trigger_error('mb_str_split(): expects parameter 2 to be int, '.\gettype($split_length).' given', E_USER_WARNING);
return
null;
}
$split_length = (int) $split_length;
if (
1 > $split_length) {
trigger_error('mb_str_split(): The length of each segment must be greater than zero', E_USER_WARNING);
return
false;
}
if (
null === $encoding) {
$encoding = mb_internal_encoding();
} else {
$encoding = (string) $encoding;
}

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;
}
?>
up
-6
vovan-ve at yandex dot ru
3 years ago
Lazy polyfill for UTF-8 only:

function utf8_str_split(string $input, int $splitLength = 1)
{
$re = \sprintf('/\\G.{1,%d}+/us', $splitLength);
\preg_match_all($re, $input, $m);
return $m[0];
}
To Top