访问UTF-8字符串中的特定字符


Access specific characters in UTF-8 string

这里的一个问题的答案使我遇到了以下"问题"或挑战:

如果字符串是UTF-8编码并且包含特殊字符,是否有可能从特定位置获取一个字符?

对于包含字符串的非特殊字符,这是有效的:

$str = 'abcd';
echo $str{1}; // will print "b"

但是对于像这样的字符串:

$str = 'abc★';
echo $str{1}; // will return "b"
echo $str{3}; // leads to a question mark

当然PHP文件是用UTF-8编码的,<meta charset="utf-8">在HTML的头部。

所以有任何解决方案,以获得这种方法捕捉字符在字符串的工作?

一种可能的方法

$str = 'abc★';
preg_match_all('/./su', $str, $m);
$chars = $m[0];
echo $chars[1]; // b
echo $chars[3]; // ★

/./su表示"utf8模式下的任何字符,包括换行符("s")"。

或者像这样

echo mb_substr($str, 3, 1, 'utf8'); // ★