PHP charset问题

时间:2012-03-21 17:36:50

标签: php encoding utf-8 character-encoding

我正在PHP中编写一个基本函数,它接受一个输入字符串,将“怪异”字符列表转换为URL友好字符。编写函数不是问题,而是它如何用奇怪的字符来解释字符串。

例如,现在我遇到了这个问题:

$string = "år";
echo $string[0]; // Output: �
echo $string[1]; // Output: �
echo $string[0] . $string[1]; // Output: å
echo $string[2]; // Output: r

所以基本上它将字母“å”解释为两个字符,这对我来说是个问题。因为我希望能够单独查看字符串的每个字符,并在需要时替换它。

我用UTF8编码所有内容,我知道我的问题必须用UTF8做一些事情,将奇怪的字符视为两个字符,正如我们上面所见。

但我该如何解决这个问题呢?基本上我想实现这个目标:

$string = "år";
echo $string[0]; // Output: å
echo $string[1]; // Output: r

2 个答案:

答案 0 :(得分:2)

$string = "år";

mb_internal_encoding('UTF-8');
echo mb_substr($string, 0, 1); // å
echo mb_substr($string, 1, 1); // r

答案 1 :(得分:1)

由于UTF编码并非总是每个字母1个字节,但由于需要更多空间而延伸,因此非ASCII字母实际上占用的内存超过一个字节。对字符串变量的类似数组的访问返回该字节,而不是字母。所以要真正得到它,你应该使用那个方法

echo mb_substr($string, 0,1);// Output: å
echo mb_substr($string, 1,1);// Output: r