一切都设置为UTF-8 (文件编码,MySQL,但是我不使用它,Apache,meta,mbstring等等)但是看看这个:
$s="áéőúöüóűí";
echo $s; //works perfectly
echo $s[0] // doesn't work. Prints out a single '?'.我几乎什么都试过了。有什么想法吗?提前感谢!
发布于 2013-08-12 12:54:33
这是绝对正确的行为。
如果要从多字节字符串获得第一个字母,而不是从二进制字符串获得第一个字节,则必须使用mb_substr()。
mb_internal_encoding("UTF-8");
echo mb_substr($s,0,1);发布于 2013-08-12 12:54:15
应该对多字节字符串使用*函数。substr()在你的案子里。
发布于 2013-08-12 12:57:16
如果你定义$s="á",它会起作用吗?我相信,当编码在UTF-8,这些特殊的字符存储在两个UTF-字符.
如果您在ANSI中显示一些UTF-8文本,则呈现如下:圣保罗
您可以看到,á变成了圣保罗,因此呈现第一个字符($s)只能显示“圣保罗”,这是一个不完整的字符。
https://stackoverflow.com/questions/18187480
复制相似问题