私はmbstring.func_overload = 7とUTF-8を使用しています。すべて正常に動作しますが、これは正しくありません。マルチバイト文字列の文字にアクセスするPHP
$str = "ãçéíõ";
echo $str[0];
ブラウザに疑問符が印刷されます。
これは代わりに、正常に動作:
echo substr($str,0,1);
誰かがなぜ知っていますか?
私はmbstring.func_overload = 7とUTF-8を使用しています。すべて正常に動作しますが、これは正しくありません。マルチバイト文字列の文字にアクセスするPHP
$str = "ãçéíõ";
echo $str[0];
ブラウザに疑問符が印刷されます。
これは代わりに、正常に動作:
echo substr($str,0,1);
誰かがなぜ知っていますか?
はい、1バイト文字が1〜4バイトで表されるマルチバイト文字列を使用しているためです。 1バイトだけを選択した場合($str[0]
のように)、たぶん半分の文字しか選択されていないでしょう。 substr()
は代わりにマルチバイトの保存であり、バイト数ではなく文字数です。
$str[0]
で文字列にインデックスを付けると、そこからバイトが引き出されます。 mbstring.func_overload
に設定されていても、エンコードを認識することはできません。都合のよいときでも、substr
を使用する必要があります。
文字列にインデックスを付けることは、その文字列がブロブを表していない限り、ひどいコーディングエラーです。