2012-03-21 58 views
1

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

例如,现在我有这样的问题:

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

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

我使用UTF8编码所有内容,我知道我的问题必须使用UTF8将奇怪字符视为两个字符,如上所述。

但是我该如何解决这个问题?基本上我想实现这一点:

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

为什么不使用mb_substr()? – Endijs 2012-03-21 17:38:43

+2

Chekc出http://php.net/manual/en/function.mb-substr.php – 2012-03-21 17:39:12

+0

@Pekka我误解了问题 – safarov 2012-03-21 17:40:13

回答

1

由于UTF编码并不总是1个字节的每一封信,但绵延如您需要更多空间的非ASCII字符采取实际的存储多个字节。对字符串变量的数组访问返回该字节,而不是字母。所以,实际上得到它,你应该使用方法为

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

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

不知道为什么这是downvoted?无论如何,据我所知,这是正确的,所以+1 – 2012-03-21 18:05:59

+0

@Pekka我同意。 Bot和Artjoms的答案为我解决了这个问题,但是由于Artjom首先写了他的答案,我选择了他的接受 – Weblurk 2012-03-21 18:31:10