ソース コードを分析するツールを作成します。このようなツールは、特に文字エンコーディングに関して、ソース コード ファイルを正しく読み取る必要があります。たとえば、「文字列リテラルの正確なバイト文字列は何ですか?」(PHP リテラルと HTML テキストの両方)。
私のおそらく間違った理解は、PHP ソース ファイルは 8 ビット文字のみであるということです (つまり、PHP エンジンは、8 ビット文字のみを含むと想定されているため、そのように読み取ります [正しい]?)。しかし、どのエンコーディングの 8 ビット文字ですか? (私は、ISO-8859-1 (-x?) に一致させることを意図していると思います [誰かが章と節を引用できますか?]。つまり、ウムラウトはウムラウトであることを意図していますよね? これに続いて、HTML で PHP スクリプトを書くことができます。ほとんどのヨーロッパの国/文字セットの文字列を簡単に。
しかし、これが Unicode の問題であることは明らかです。私が知る限り、ほとんどの PHP アプリケーションは基本的に、8 ビットの PHP 文字列に挿入できる UTF-8 バイト シーケンスを含む文字列を使用して Unicode を処理します。これに続いて、サーバーに UTF-8 テキストを生成していることを伝えれば、HTML に Unicode UTF-8 シーケンスが含まれるスクリプトを生成できます。
上記の状況では、PHP ファイルを 8 ビットの文字テキストとして読み取ることができ、これは言語と一致するように思えます。
私が困惑しているのは、UTF-8 としてエンコードされた PHP ソース ファイルです (Joomla パッケージには約 1800 のソース ファイルがあり、そのうちの 10 は UTF-8 で、残りはそうではありません)。UTF-8 レンダリングで正しく表示される (非 ASCII) ヨーロッパ文字は、実際にはマルチバイト シーケンスとしてエンコードされます。UTF-8 として提供されるページは、HTML が正しくレンダリングされると思います。しかし、ヨーロッパ文字やその他の Unicode 文字の文字列比較は、テキスト エディターで正しく表示されるようで、まったく機能しません。また、文字列リテラルには、含まれているように見えるものが含まれません。エディターが提供しているため、プログラマーは UTF-8 ファイルを使用しますか? 彼らは意図的にこれを行っていますか?それとも、ほとんどの仕事に関係のない単なる事故ですか?
では、PHP ソースファイルはどのように読めばよいのでしょうか? (具体的には、どの文字エンコーディングでしょうか?) 考えられる答えの 1 つは、実際のコンテンツや BOM に関係なく、常に ISO-8859-1 8 ビット コードとして使用することです (多くの UTF-8 BOM マーク付き PHP ファイルを目にします)。別の答えは、そのようにマークされている場合、UTF-8 です。
[私たちのツールは、任意のエンコーディングを読み書きします。「些細な」ツールは、1文字のエンコーディングでファイルを読み取り、別のエンコーディングで同一のコードポイントを書き込みます。多くの UTF-8 コード ポイント (ユーロ記号など) は ISO8859-x でエンコードできないため、UTF-8 PHP ファイルをそのように読み取ると、ISO8859-1 と同等のファイルを書き込む際に問題が発生します。]
8 月 30 日編集: PHP ファイルをチェックして、UTF-8 BOM があるかどうか、またはすべて合法な UTF-8 シーケンスがあるように見えるかどうかを確認します。どちらの場合も、ファイルを UTF-8 として読み取ります。それ以外の場合は、デフォルトで ISO8859-1 として読み取ります。ファイルのエンコーディングを変更しても保持されるようになりました。(これをすべて正しく行うには、かなりの作業が必要です)。これは安全な戦略のように見えますが、PHP プログラマーが期待しているものとは異なる可能性があります。