Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 访问UTF-8字符串中的特定字符_Php_String_Encoding_Utf 8 - Fatal编程技术网

Php 访问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编码的

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编码的,
位于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!=字节。