7

I have the following code which is not working with UTF-8 characters. How can I fix it?

$seed = preg_split('//u', $seed, -1, PREG_SPLIT_NO_EMPTY);
$seed = str_split('АБВГДЕЖЗ'); // and any other characters

shuffle($seed); // probably optional since array_is randomized; this may be redundant
$code = '';
foreach (array_rand($seed, 5) as $k) $md5_hash .= $seed[$k];

//We don't need a 32 character long string so we trim it down to 5 
$security_code = $code;

I have tried this code:

$seed = preg_split('//u', $seed, -1, PREG_SPLIT_NO_EMPTY);

but it is still not working.

ali_m
  • 71,714
  • 23
  • 223
  • 298
user3288430
  • 79
  • 1
  • 3

2 Answers2

14

You must create the variable $seed and give it a string value before you can use it as the second parameter of preg_split:

$seed = 'АБВГДЕЖЗ';
$seed = preg_split('//u', $seed, -1, PREG_SPLIT_NO_EMPTY);

The output of print_r($seed) will be:

Array
(
    [0] => А
    [1] => Б
    [2] => В
    [3] => Г
    [4] => Д
    [5] => Е
    [6] => Ж
    [7] => З
)

I hope the rest of your code will work just fine.

Sharanya Dutta
  • 3,981
  • 2
  • 17
  • 27
1

For working with UTF-8 strings use Multibyte String Functions.

For your purpose it will be mb_split.

Update

$seed = preg_split('//u', 'abcdefghijklmnopqrstuvwxyz', -1, PREG_SPLIT_NO_EMPTY);
foreach (array_rand($seed, 5) as $k) {
    $md5_hash .= $seed[$k];
}