転送先:coolcode.cn
数日前、Web ページを任意の文字セットで正常に表示する方法についての記事を書きました。その紹介は非常に簡単で、最初の 128 文字以外の文字セットは NCR で表されます。当時は簡単すぎると思ったので、具体的な変換方法を紹介します。しかし、後でこの質問をしている人がいたので、ここで詳しく説明します。
最初のステップは、ソース文字セットの文字列を UTF-16 文字セットに変換することです。このステップは、UTF-16 文字セットの各文字が 2 バイトであり、後の処理が容易になるためです。ソース文字セットに対して直接処理を行う場合、非常に複雑になります。ソース文字セットは、元の Web ページのメタ タグから取得することも、個別に指定することもできます。これは、ユーザーが送信したファイルが必ずソース文字セットであることを保証できないため、ユーザーがフォームでソース文字セットを指定できるようにするためです。 HTML ファイルである必要があります (他のファイルについても同様です)。はい、たとえば、WordPress の中国語パッケージのソース ファイルは po ファイルであり、その中のコンテンツもこの方法で処理できます)。 HTML ファイルの場合、文字セットを指定するためのメタタグが必ずしも含まれていないため、フォームで別途指定してください。文字セットは比較的安全です。ある文字セットを別の文字セットに変換するのは実際には非常に面倒だと思うかもしれませんが、PHP にはそのような関数が既に含まれているため、さまざまな文字セット間の変換を簡単に実現できます。 iconv 拡張機能がマシンにインストールされていない場合は、基本的に何もできないため、mb_convert_encoding 関数を使用することもできます。一流の専門家でない限り、これほど多くの種類のコードを自分で変換するのは大変なことです。 iconv の方が効率的で、より多くの文字セットをサポートしているため、iconv を使用することをお勧めします。
上記のステップが完了したら、次のステップは文字列を 2 バイト単位で処理することです。これら 2 バイトは直接数値に変換され、xxxx; の xxxxx になります。数値が 128 未満の場合は、この文字を直接使用します (ここでは 1 バイトになることに注意してください)。それ以外の場合は、xxxx; の形式を使用します。ここで注意すべき点は、この数値が 65279 (16 進数の 0xFEFF) の場合は無視してください。これは、Unicode エンコーディングの送信制御文字であり、現在の文字列には既に iso-8859 しか含まれていないためです。1 は最初の 128 文字です。エンコーディングなので必要ありません。
基本的なアイデアは次のとおりです。
ダウンロード: nochaoscode.php