首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PHP中,将字符串拆分成Unicode字符数组的最佳方式是什么?

在PHP中,将字符串拆分成Unicode字符数组的最佳方式是什么?
EN

Stack Overflow用户
提问于 2009-09-08 21:31:18
回答 8查看 6.9K关注 0票数 20

在PHP中,将字符串拆分成Unicode字符数组的最佳方式是什么?如果输入不一定是UTF-8?

我想知道输入字符串中的Unicode字符集是否是另一个Unicode字符集的子集。

为什么不直接运行mb_系列函数,就像前两个答案没有做的那样?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-09-08 21:39:22

您可以将'u‘修饰符与PCRE正则表达式一起使用;参见Pattern Modifiers (引号):

u (PCRE8)

此修饰符打开与Perl不兼容的PCRE的附加功能。模式字符串被视为UTF-8。此修饰符在Unix上的PHP4.1.0或更高版本中可用,在win32上的PHP4.2.3中可用。从PHP 4.3.5开始检查UTF-8模式的有效性。

例如,考虑以下代码:

代码语言:javascript
运行
复制
header('Content-type: text/html; charset=UTF-8');  // So the browser doesn't make our lives harder
$str = "abc 文字化け, efg";

$results = array();
preg_match_all('/./', $str, $results);
var_dump($results[0]);

你会得到一个不可用的结果:

代码语言:javascript
运行
复制
array
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'c' (length=1)
  3 => string ' ' (length=1)
  4 => string '�' (length=1)
  5 => string '�' (length=1)
  6 => string '�' (length=1)
  7 => string '�' (length=1)
  8 => string '�' (length=1)
  9 => string '�' (length=1)
  10 => string '�' (length=1)
  11 => string '�' (length=1)
  12 => string '�' (length=1)
  13 => string '�' (length=1)
  14 => string '�' (length=1)
  15 => string '�' (length=1)
  16 => string ',' (length=1)
  17 => string ' ' (length=1)
  18 => string 'e' (length=1)
  19 => string 'f' (length=1)
  20 => string 'g' (length=1)

但是,使用下面的代码:

代码语言:javascript
运行
复制
header('Content-type: text/html; charset=UTF-8');  // So the browser doesn't make our lives harder
$str = "abc 文字化け, efg";

$results = array();
preg_match_all('/./u', $str, $results);
var_dump($results[0]);

(注意regex末尾的'u‘)

你得到了你想要的:

代码语言:javascript
运行
复制
array
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'c' (length=1)
  3 => string ' ' (length=1)
  4 => string '文' (length=3)
  5 => string '字' (length=3)
  6 => string '化' (length=3)
  7 => string 'け' (length=3)
  8 => string ',' (length=1)
  9 => string ' ' (length=1)
  10 => string 'e' (length=1)
  11 => string 'f' (length=1)
  12 => string 'g' (length=1)

希望这能有所帮助:-)

票数 23
EN

Stack Overflow用户

发布于 2015-05-27 04:33:27

preg_match_all稍微简单一点

代码语言:javascript
运行
复制
preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY)

这将返回一个一维数组的字符。不需要matches对象。

票数 14
EN

Stack Overflow用户

发布于 2009-09-08 21:35:06

试试这个:

代码语言:javascript
运行
复制
preg_match_all('/./u', $text, $array);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1396434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档