Php 带方括号的字符串中的访问字符不';不能正确输出

Php 带方括号的字符串中的访问字符不';不能正确输出,php,arrays,string,Php,Arrays,String,我有一个字符串,我想访问ä字符。但是它输出问号而不是正确的字符 这是我的密码 $array = array('ä', 'b', 'c'); $string = 'äbc'; echo $string; // äbc echo '<br />'; echo $string[0]; // ? echo '<br />'; echo $array[0]; // ä 根据您的字符集,字母ä是多字节字母。使用数组访问访问字符串时,它返回第一个字节。在多字节ä的情况下,返回不可打印

我有一个字符串,我想访问
ä
字符。但是它输出问号而不是正确的字符

这是我的密码

$array = array('ä', 'b', 'c');
$string = 'äbc';
echo $string; // äbc
echo '<br />';
echo $string[0]; // ?
echo '<br />';
echo $array[0]; // ä

根据您的字符集,字母ä是多字节字母。使用数组访问访问字符串时,它返回第一个字节。在多字节ä的情况下,返回不可打印的控制字符


使用数组访问访问数组会返回第一个元素,无论其长度如何,在本例中为multi byteä

根据您的字符集,字母ä是多字节字母。使用数组访问访问字符串时,它返回第一个字节。在多字节ä的情况下,返回不可打印的控制字符


使用数组访问访问数组会返回第一个元素,无论其长度如何,在本例中为multi byteä

您需要像这样使用
mb_substr()

$array = array('ä', 'b', 'c');
$string = 'äbc';
echo $string; // äbc
echo '<br />';
echo mb_substr($string, 0, 1, 'UTF8'); // replace UTF8 with whatever charset you are using
echo '<br />';
echo $array[0]; // ä
$array=array('a','b','c');
$string='äbc';
echo$string;//西元前
回声“
”; echo mb_substr($string,0,1,'UTF8');//用您正在使用的任何字符集替换UTF8 回声“
”; echo$array[0];//ä

原因是PHP假定字符占用一个字节。但在使用ä的情况下并非如此,因此需要使用mb_substr()而不是索引或substr()


我强烈建议您阅读此问题的答案

您需要像这样使用
mb_substr()

$array = array('ä', 'b', 'c');
$string = 'äbc';
echo $string; // äbc
echo '<br />';
echo mb_substr($string, 0, 1, 'UTF8'); // replace UTF8 with whatever charset you are using
echo '<br />';
echo $array[0]; // ä
$array=array('a','b','c');
$string='äbc';
echo$string;//西元前
回声“
”; echo mb_substr($string,0,1,'UTF8');//用您正在使用的任何字符集替换UTF8 回声“
”; echo$array[0];//ä

原因是PHP假定字符占用一个字节。但在使用ä的情况下并非如此,因此需要使用mb_substr()而不是索引或substr()


我强烈建议您阅读此问题的答案

我认为这与字符编码有关,如果您将
ä
替换为
x
,它将按预期工作。@Celeritas
$array[0]
返回正确的值。这实际上是此问题的重复,虽然很难说@Celeritas:问题被编辑了。。。而且,
string[0]
本身对多字节字符也不起作用……当然了dunning kruger……我认为这与字符编码有关,如果你用
x
替换
ä
,它会按预期工作。@Celeritas
$array[0]
返回正确的值。这实际上是这个问题的重复,虽然很难说@Celeritas:问题被编辑了。。。而且
string[0]
本身对多字节字符不起作用……当然了dunning kruger。。。