2011-12-16 17 views
0

私はmbstring.func_overload = 7とUTF-8を使用しています。すべて正常に動作しますが、これは正しくありません。マルチバイト文字列の文字にアクセスするPHP

$str = "ãçéíõ"; 
echo $str[0]; 

ブラウザに疑問符が印刷されます。

これは代わりに、正常に動作:

echo substr($str,0,1); 

誰かがなぜ知っていますか?

答えて

0

はい、1バイト文字が1〜4バイトで表されるマルチバイト文字列を使用しているためです。 1バイトだけを選択した場合($str[0]のように)、たぶん半分の文字しか選択されていないでしょう。 substr()は代わりにマルチバイトの保存であり、バイト数ではなく文字数です。

1

$str[0]で文字列にインデックスを付けると、そこからバイトが引き出されます。 mbstring.func_overloadに設定されていても、エンコードを認識することはできません。都合のよいときでも、substrを使用する必要があります。

文字列にインデックスを付けることは、その文字列がブロブを表していない限り、ひどいコーディングエラーです。

関連する問題