web-dev-qa-db-ja.com

PHP mb_substr()が正しく機能していませんか?

このコード

print mb_substr('éxxx', 0, 1);

空のスペースを出力します:(

最初の文字_é_を出力することになっています。しかし、これはうまくいくようです:

print mb_substr('éxxx', 0, 2);

しかし、(0、2)は2文字を意味するため、正しくありません...

21
Alex

エンコーディングパラメータをmb_substrに渡してみてください:

print mb_substr('éxxx', 0, 1, 'utf-8');

エンコーディングが自動的に検出されることはありません。

48
povilasp

実際には、一部のシステムでは、マルチバイト関数が内部エンコーディングのデフォルトでISO-8859-1になっていることがわかりました。これは、マルチバイトテキストを処理する能力を効果的に台無しにします。

適切なデフォルトを設定すると、おそらくこれと他のいくつかの問題が修正されます。

mb_internal_encoding('UTF-8');
13