PHP:如何分割UTF-8字符串?

7
我有以下代码,无法处理UTF-8字符。我该如何修复?
$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;

我尝试了以下代码:
$seed = preg_split('//u', $seed, -1, PREG_SPLIT_NO_EMPTY);

但还是没有生效。

2
当我在谷歌中输入“PHP str_split UTF-8”时,我得到了一个非常好的结果,排名第一。 - Pekka
1
@Pekka웃 当我现在这样做时,我会得到这个问题。 - apokryfos
2个回答

14

在使用preg_split函数的第二个参数之前,您需要创建变量$seed并为其赋一个字符串值:

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

print_r($seed) 的输出结果将会是:

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

我希望你的其余代码能够正常工作。


不必将字符串作为变量传递到 preg_split 中。该函数并不需要这样做。它也可以是字符串。 - oleksii.svarychevskyi

1

如果要处理UTF-8字符串,请使用多字节字符串函数

对于您的目的,可以使用mb_split

更新

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

谢谢,但这不起作用 $seed = mb_split('АБВГДЕЖЗ'); //以及任何其他字符 - user3288430
是的。我不明白这个函数的代码应该是什么样子的。 - user3288430
类似这样的 mb_split("\s", "hello world") - oleksii.svarychevskyi
那么我不明白了。我帮了你还是没有? - oleksii.svarychevskyi
不好意思,这是正确的代码吗?我收到了以下警告:“Warning: array_rand() [function.array-rand]: Second argument has to be between 1 and the number of elements in the array in C:\AppServ\www\php\total.php on line 7Warning: Invalid argument supplied for foreach() in C:\AppServ\www\php\total.php on line 7” - user3288430
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接