正则表达式破坏中文字符串

发布于 2024-09-11 22:25:44 字数 456 浏览 7 评论 0原文

当我运行这段代码和类似的一些中文时,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) "麻烦"
}

我的正则表达式是否错误?

When i run this code and similar some Chinese the ni (你) character (maybe others) gets chopped of and broken.

$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) "麻烦"
}

Is my regex wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

往昔成烟 2024-09-18 22:25:44

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

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

如果采用其他编码,请参阅 unicornaddict 的 答案

If your string is in UTF-8, you must use the u modifier:

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

If it's in another encoding, see unicornaddict's answer.

空城旧梦 2024-09-18 22:25:44

由于输入字符串是多字节的,我想你必须使用 mb_split 代替 preg_split。

Since the input string is multi-byte, I guess you'll have to use mb_split in place of preg_split.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文