一切都设置为 UTF-8(文件编码、MySQL [但我不使用它]、Apache、meta、mbstring 等),但请检查一下:
$s="áéőúöüóűí";
echo $s; //works perfectly
echo $s[0] // doesn't work. Prints out a single '?'.
我几乎尝试了一切。有任何想法吗?提前致谢!
这是绝对正确的行为。
如果要从多字节字符串中获取第一个字母,而不是从二进制字符串中获取第一个字节,则必须使用:mb_substr()
mb_internal_encoding("UTF-8");
echo mb_substr($s,0,1);
您应该对多字节字符串使用mb_*函数。mb_substr()在你的情况下。
如果你定义 $s[0]="á",它会起作用吗?我相信当以 UTF-8 编码时,这些特殊字符存储在两个 UTF-chars 上。
如果您在 ANSI 中显示一些 UTF-8 文本,它会呈现如下: áéoúöüóuÃ
你看到 á 变成 á 所以渲染第一个字符 ($s[0]) 只会显示 "Ã",这是一个不完整的字符
您必须在数据库中进行一些更改转到表结构
你可以找到一列“排序规则”
您要更改的列单击右侧菜单上的编辑
默认排序规则是 - 'latin1_general_ci' 将其更改为 'utf8_general_ci'