We are talking about Multi Byte ( e.g. UTF-8) strings here, so preg_split will fail for the following string:
'Weiße Rosen sind nicht grün!'
And because I didn't find a regex to simulate a str_split I optimized the first solution from adjwilli a bit:
<?php
$string = 'Weiße Rosen sind nicht grün!'
$stop = mb_strlen( $string);
$result = array();
for( $idx = 0; $idx < $stop; $idx++)
{
$result[] = mb_substr( $string, $idx, 1);
}
?>
Here is an example with adjwilli's function:
<?php
mb_internal_encoding( 'UTF-8');
mb_regex_encoding( 'UTF-8');
function mbStringToArray
( $string
)
{
$stop = mb_strlen( $string);
$result = array();
for( $idx = 0; $idx < $stop; $idx++)
{
$result[] = mb_substr( $string, $idx, 1);
}
return $result;
}
echo '<pre>', PHP_EOL,
print_r( mbStringToArray( 'Weiße Rosen sind nicht grün!', true)), PHP_EOL,
'</pre>';
?>
Let me know [by personal email], if someone found a regex to simulate a str_split with mb_split.
mb_split
(PHP 4 >= 4.2.0, PHP 5)
mb_split — Scinde une chaîne en tableau avec une expression rationnelle multi-octets
Description
array mb_split
( string $pattern
, string $string
[, int $limit= -1
] )
Scinde la chaîne multi-octets string en utilisant l'expression rationnelle pattern puis en retournant le résultat sous forme de tableau.
Liste de paramètres
- pattern
-
Le masque de l'expression rationnelle.
- string
-
La chaîne à scinder.
- limit
- Si le paramètre optionnel limit est spécifié, la chaîne sera scindée en limit éléments au plus.
Valeurs de retour
Le résultat, sous la forme d'un tableau.
Notes
Note: L'encodage interne ou l'encodage des caractères spécifié par la fonction mb_regex_encoding() sera utilisé comme encodage de caractères pour cette fonction.
Voir aussi
- mb_regex_encoding() - Retourne le jeu de caractères courant pour les expressions rationnelles
- mb_ereg() - Recherche par expression rationnelle avec support des caractères multi-octets
mb_split
gert dot matern at web dot de
03-Aug-2009 12:34
03-Aug-2009 12:34
Sezer Yalcin
19-Feb-2009 02:13
19-Feb-2009 02:13
To split by mb letters, use preg_split with /u modifier instead of calling mb functions thousand times.
adjwilli at yahoo dot com
26-Dec-2007 06:37
26-Dec-2007 06:37
I figure most people will want a simple way to break-up a multibyte string into its individual characters. Here's a function I'm using to do that. Change UTF-8 to your chosen encoding method.
<?php
function mbStringToArray ($string) {
$strlen = mb_strlen($string);
while ($strlen) {
$array[] = mb_substr($string,0,1,"UTF-8");
$string = mb_substr($string,1,$strlen,"UTF-8");
$strlen = mb_strlen($string);
}
return $array;
}
?>
