5

かなりの量のパス名操作を行うプロジェクトに取り組んでいます。Mac OS X では正常に動作しますが、驚いたことに、Windows では utf-8 でエンコードされた文字列を使用してrealpathなどの関数を呼び出す方法がありません。これは、Windows のsetlocaleが utf-8 をサポートしていないためです。

PHP: Windows 7 の setlocale

http://msdn.microsoft.com/en-us/library/x99tb11d.aspx

http://www.phpwact.org/php/i18n/utf-8

内部でutf8_encodeutf8_decodeを呼び出すラッパー関数を作成することはできますが、php にはファイル関数が多すぎてかなり負担になります。

また、このプロジェクトはオープン ソースであるため、ユーザーが自分のコードで私の文字列 (Web 指向であるためすべて utf-8) を使用してファイルを読み書きしようとすると、壊れていると感じる可能性があります。

主要なphpファイル関数のutf-8バージョンを提供するライブラリはありますか? コードにバンドルできるように、拡張機能よりも自己完結型のディレクトリを好みます。

このようなライブラリが見つからない場合、php がクロスプラットフォーム開発に適さない原因はアキレス腱かもしれないと心配しています。また、Ruby、Python、C++ などの他の言語がこの問題をどのように回避するのかにも興味があります。そうでない場合、これは Windows に対する別のストライキである可能性があり、別の回避策を見つける必要があります。

4

1 に答える 1

1

Windows の setlocale() 関数 (php ではなく実際のライブラリ関数) は、マルチバイト エンコーディングをサポートしていません。Windowsでutf-8ロケールを設定することは不可能です。

ただし、新しい関数を定義する必要はありません。ストリーム ラッパーを記述します。ストリーム ラッパーは、ほとんどのファイル関連関数で使用できます。XSLT テンプレートでのドキュメントの読み込みなどの内部関数も含まれます。

于 2013-11-07T09:26:31.050 に答える