このコード
print mb_substr('éxxx', 0, 1);
空のスペースを出力します:(
最初の文字_é
_を出力することになっています。しかし、これはうまくいくようです:
print mb_substr('éxxx', 0, 2);
しかし、(0、2)は2文字を意味するため、正しくありません...
エンコーディングパラメータをmb_substrに渡してみてください:
print mb_substr('éxxx', 0, 1, 'utf-8');
エンコーディングが自動的に検出されることはありません。
実際には、一部のシステムでは、マルチバイト関数が内部エンコーディングのデフォルトでISO-8859-1になっていることがわかりました。これは、マルチバイトテキストを処理する能力を効果的に台無しにします。
適切なデフォルトを設定すると、おそらくこれと他のいくつかの問題が修正されます。
mb_internal_encoding('UTF-8');