0

一切都设置为 UTF-8(文件编码、MySQL [但我不使用它]、Apache、meta、mbstring 等),但请检查一下:

$s="áéőúöüóűí";
echo $s; //works perfectly

echo $s[0] // doesn't work. Prints out a single '?'.

我几乎尝试了一切。有任何想法吗?提前致谢!

4

4 回答 4

3

这是绝对正确的行为。

如果要从多字节字符串中获取第一个字母,而不是从二进制字符串中获取第一个字节,则必须使用:mb_substr()

mb_internal_encoding("UTF-8");
echo mb_substr($s,0,1);
于 2013-08-12T12:54:33.570 回答
2

您应该对多字节字符串使用mb_*函数。mb_substr()在你的情况下。

于 2013-08-12T12:54:15.727 回答
0

如果你定义 $s[0]="á",它会起作用吗?我相信当以 UTF-8 编码时,这些特殊字符存储在两个 UTF-chars 上。

如果您在 ANSI 中显示一些 UTF-8 文本,它会呈现如下: áéoúöüóuÃ

你看到 á 变成 á 所以渲染第一个字符 ($s[0]) 只会显示 "Ã",这是一个不完整的字符

于 2013-08-12T12:57:16.253 回答
-1

您必须在数据库中进行一些更改转到表结构

你可以找到一列“排序规则”

您要更改的列单击右侧菜单上的编辑

默认排序规则是 - 'latin1_general_ci' 将其更改为 'utf8_general_ci'在此处输入图像描述

于 2013-08-12T13:14:40.203 回答