14

私のPHPスクリプトを非ASCII文字を使用してUTF-8エンコーディングで実行すると、のような一部のPHP関数が機能strtolower()しません。

mb_strtolowerを使用することもできますが、このスクリプトはあらゆる種類の異なるプラットフォームと構成で実行でき、マルチバイト文字列拡張子が使用できない場合があります。使用する前に関数が存在するかどうかを確認できましたが、コード全体に文字列関数が散らばっていて、すべてのインスタンスを置き換えるわけではありません。

誰かが、を使用することを提案しset_locale(LC_CTYPE, 'C')ました。これにより、文字列関数が正しく機能するようになります。これは問題ないように聞こえますが、それが何をしているのかを正確に理解せずにその変更を導入したくありません。以前にset_localeを使用して数値の形式を変更したことがありますが、これまでLC_CTYPEフラグを使用したことがなく、その機能がよくわかりません。値'C'はどういう意味ですか?

4

1 に答える 1

12

C「ハードコードされたロケールを使用する」ことを意味します (そして、ほとんどの *NIX プログラムは C で書かれているため、 と呼ばれCます)。ただし、通常は UTF-8 ロケールではありません。

UTF-8 などのマルチバイト文字セットを使用している場合は、通常の文字列関数を使用できませんmb_。対応する文字セットを使用する必要があります。ただし、ほとんどすべての PHP インストールで、この拡張機能を有効にする必要があります。

于 2011-03-08T11:13:37.600 に答える