在php中将字节位置转换为字符位置

时间:2016-12-30 16:47:40

标签: php utf-8 byte

我在utf-8字符串中有一个字符的字节位置(通过preg_match和PREG_OFFSET_CAPTURE得到它)。但我需要角色位置。我怎么能得到它?

以下是一个例子:

我有这样的事情:

$x = 'öüä nice world';
preg_match('/nice/u', $x, $m, PREG_OFFSET_CAPTURE);
var_dump($m);

导致:

array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(4) "nice"
    [1]=>
    int(7)
  }
}

所以我的字节位置是7。

但是我需要4的字符位置。有没有办法将字节位置转换为字符位置?

此示例高度简化。我不能选择使用mb_strpos或类似的东西来找到“好”这个词的位置。我需要正则表达式,实际上我需要preg_match_all而不是preg_match。所以我认为转换位置对我来说是最好的方式。

1 个答案:

答案 0 :(得分:1)

如前所述,您可以基于similar question

中的一个示例构建
$x = 'öüä nice öüä nice öüä nice öüä nice öüä nice';
$r = preg_match_all('/nice/u', $x, $m, PREG_OFFSET_CAPTURE);
for($i = 0; $i < $r; $i++) {
    var_dump(mb_strlen(substr($x, 0, $m[0][$i][1])));
}

<强>结果

int(4)
int(13)
int(22)
int(31)
int(40)

这会显示每个角色的位置,其中&#34; 很好&#34;会马上跟着......