我正在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
答案 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