2

当我运行这段代码和类似的一些中文时,ni(你)字符(也许是其他字符)被砍断和破坏。

$sample = "你不喜欢 香蕉 吗";
$parts = preg_split("/[\s,]+/", $sample);
var_dump($parts);

//outputs
array(4) {
  [0]=>
  string(2) "�"
  [1]=>
  string(9) "不喜欢"
  [2]=>
  string(6) "香蕉"
  [3]=>
  string(3) "吗"
}

//in 我觉得 你很 麻烦
//out
array(4) {
  [0]=>
  string(9) "我觉得"
  [1]=>
  string(2) "�"
  [2]=>
  string(3) "很"
  [3]=>
  string(6) "麻烦"
}

我的正则表达式错了吗?

4

2 回答 2

6

如果您的字符串是 UTF-8 格式,则必须使用u修饰符:

$sample = "你不喜欢 香蕉 吗";
$parts = preg_split("/[\\s,]+/u", $sample);
var_dump($parts);

如果它是另一种编码,请参阅 unicornaddict 的回答

于 2010-07-30T04:27:29.550 回答
0

由于输入字符串是多字节的,我猜你必须使用mb_splitpreg_split 来代替。

于 2010-07-30T04:24:50.723 回答