転送先: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; の形式を使用します。ここで注意すべき点の 1 つは、この数値が 65279 (16 進数の 0xFEFF) である場合は、無視してください。これは、Unicode エンコーディングの送信制御文字であり、現在の文字列には iso-8859-1 のみが含まれているためです。エンコーディングなので必要ありません。
基本的な考え方は次のとおりです。
ダウンロード: nochaoscode.php
コードをコピー コードは次のとおりです:
関数 nochaoscode($encode, $str) {
$str = iconv($encode, "UTF-16BE", $str);
for ($i = 0; $i
if ($code $output .= chr($code);
} else if ($code != 65279) {
。
}
}
$output を返します。
}
?>