PHP字符集问题


PHP charset issue

我正在用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
$string = "år";
mb_internal_encoding('UTF-8');
echo mb_substr($string, 0, 1); // å
echo mb_substr($string, 1, 1); // r

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

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