2012-03-21 59 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