Php 访问UTF-8字符串中的特定字符
A导致我遇到以下“问题”或挑战: 如果字符串是UTF-8编码的,并且包含特殊字符,那么是否可能从特定位置获取字符 因此,对于包含字符串的非特殊字符,这是有效的:Php 访问UTF-8字符串中的特定字符,php,string,encoding,utf-8,Php,String,Encoding,Utf 8,A导致我遇到以下“问题”或挑战: 如果字符串是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编码的
$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编码的,
位于HTML的头部
那么,有什么解决方案可以让这种捕捉字符串中字符的方法发挥作用呢?一种可能的方法
$str = 'abc★';
preg_match_all('/./su', $str, $m);
$chars = $m[0];
echo $chars[1]; // b
echo $chars[3]; // ★
//su
表示“utf8模式(“u”)中的任何字符,包括换行符(“s”)
还是像这样
echo mb_substr($str, 3, 1, 'utf8'); // ★
所以没有可能让它和花括号一起工作?@TiMESPLiNTER:嗯,我有一个库,可以让你做类似
echo-str('abc')的事情★')[3]
,它正确地呼应了星号。但是普通php不行。好吧,但为什么这不起作用呢?我的意思是,人们总是说字符串是一个字符数组。所以应该可以访问其中一个字符串而不中断字符…@TiMESPLiNTER:不,php字符串不是一个字符数组。它是一个字节数组,在unicode中是world,char!=字节。