【问题标题】:PHP: How to split a UTF-8 string? [duplicate]PHP:如何拆分 UTF-8 字符串?
【发布时间】:2014-03-06 08:34:36
【问题描述】:

我的以下代码不适用于 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);

但它仍然无法正常工作。

【问题讨论】:

  • 当我在谷歌中输入PHP str_split UTF-8 时,我在#1 的位置上得到了一个非常的好结果。
  • @Pekka웃 当我现在这样做时,我得到了这个问题

标签: php string utf-8 split preg-split


【解决方案1】:

您必须创建变量$seed 并为其赋予一个字符串值,然后才能将其用作preg_split 的第二个参数:

$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。功能不需要这个。可以是字符串。
  • 你拯救了我的一天!
【解决方案2】:

要处理 UTF-8 字符串,请使用 Multibyte String Functions

对于您的目的,它将是 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('АБВГДЕЖЗ'); // 和任何其他字符
  • 您是否启用了 php 模块 extension=php_mbstring.dll?
  • 是的。我不明白这个函数的代码看起来如何。
  • 类似mb_split("\s", "hello world")
  • 在你的情况下它应该是 mb_split("//", "АБВГДЕЖЗ")
猜你喜欢
  • 2021-09-08
  • 2016-05-31
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
相关资源
最近更新 更多