我有mbstring.func_overload = 7并使用UTF-8。一切正常,但事实并非如此:
$str = "ãçéíõ";
echo $str[0];
它在浏览器中打印一个问号。
这样可以正常工作:
echo substr($str,0,1);
有人知道为什么吗?
答案 0 :(得分:1)
使用$str[0]
索引字符串会从中拉出字节。无论mbstring.func_overload
是如何设置的,都无法识别编码。即使不方便,也需要使用substr
。
索引到一个字符串是一个严重的编码错误,除非该字符串代表一个blob,你刚才发现了原因。
答案 1 :(得分:0)
是的,这是因为您正在使用多字节字符串,其中单个字符由一到四个字节表示。如果只选择一个字节(如$str[0]
),则可能只选择了一半字符。
substr()
取而代之的是多字节保存,不计算字节数,而是计算字符数。