访问多字节字符串php中的字符

时间:2011-12-16 16:16:58

标签: php

我有mbstring.func_overload = 7并使用UTF-8。一切正常,但事实并非如此:

$str = "ãçéíõ";
echo $str[0];

它在浏览器中打印一个问号。

这样可以正常工作:

echo substr($str,0,1);

有人知道为什么吗?

2 个答案:

答案 0 :(得分:1)

使用$str[0]索引字符串会从中拉出字节。无论mbstring.func_overload是如何设置的,都无法识别编码。即使不方便,也需要使用substr

索引到一个字符串是一个严重的编码错误,除非该字符串代表一个blob,你刚才发现了原因。

答案 1 :(得分:0)

是的,这是因为您正在使用多字节字符串,其中单个字符由一到四个字节表示。如果只选择一个字节(如$str[0]),则可能只选择了一半字符。 substr()取而代之的是多字节保存,不计算字节数,而是计算字符数。