サンプル・プログラムの実行例

サンプル・プログラム
CES.php | サンプル・プログラム |
準備
39: //JIS X 0123:2004 コード表
40: // ラトルズ刊『文字コード【超】研究 改訂第2版』のサンプルデータ
41: // http://query1000.com/chrc/data.html を参照
42: define('FILE_JISX0213', 'jisx0213-2004-std2.txt');
43:
EUC-JP やシフトJISコードから逆算はできるのだが、それでは、JIS第3・第4水準漢字のコードが計算できない。

そこで、深沢千尋さんが著した『文字コード【超】研究 改訂第2版』(ラトルズ=刊)のサンプルデータとして公開されている JIS X 0213:2004 のコード表 "jisx0213-2004-std2.txt" を流用することにした。このファイルをダウンロードして、適当なフォルダに配置していただきたい。
解説:JISコードを求める
185: /**
186: * JIS面区点コードを返す
187: * @param string $ch 文字(INTERNAL_ENCODING)
188: * @return string JIS面区点コード
189: */
190: function ch2kuten($ch) {
191: $infp = fopen(FILE_JISX0213, 'r');
192: while (! feof($infp)) {
193: $s = fgets($infp);
194: $arr = mb_split("\t", $s);
195: if (isset($arr[3]) && ($arr[3] == $ch)) {
196: preg_match('/[0-9]+\-[0-9]+\-[0-9]+/ui', $arr[0], $arr2);
197: return $arr2[0];
198: }
199: }
200: return '?';
201: }

前述の通り、文字を JIS X 0213 コード表と照合し、合致した JISコード(面区点コード)を返す。
解説:文字コードを求める
228: /**
229: * エンコードで指定された文字コードを返す(ch2codeの下請け)
230: * @param string $ch 文字(INTERNAL_ENCODING)
231: * @param string $encode エンコード
232: * @return string 文字コード(16進数文字列)
233: */
234: function ch2code_sub($ch, $encode) {
235: $ch2 = mb_convert_encoding($ch, $encode, INTERNAL_ENCODING);
236: //変換エラー
237: if ($ch != '?' && $ch2 == '?') return '?';
238:
239: //文字コード
240: $hex = bin2hex($ch2);
241: $hex = strtoupper($hex);
242:
243: $l = strlen($hex);
244: $outstr = '';
245: for ($i = 0; $i < $l; $i += 2) {
246: $outstr .= substr($hex, $i, 2);
247: $outstr .= ' ';
248: }
249:
250: return $outstr;
251: }

コード変換した結果を、組み込み関数 bin2hex に入れると、その文字の16進コードを取得できる。表示の便宜上、1バイトごとに空白文字を入れておく。
解説:ISO-2022-JPコードを求める
203: /**
204: * ISO-2022-JPコードを返す(エスケープは省く)
205: * @param string $ch 文字(INTERNAL_ENCODING)
206: * @return string ISO-2022-JPコード
207: */
208: function ch2iso2022jp($ch) {
209: $ch2 = mb_convert_encoding($ch, 'ISO-2022-JP', INTERNAL_ENCODING);
210: //変換エラー
211: if ($ch != '?' && $ch2 == '?') return '?';
212:
213: //文字コード
214: $hex = bin2hex($ch2);
215: $hex = strtoupper($hex);
216:
217: $l = strlen($hex);
218: $start = ($l <= 4) ? 0 : 6;
219: $outstr = '';
220: for ($i = $start; $i < $start + 4; $i += 2) {
221: $outstr .= substr($hex, $i, 2);
222: $outstr .= ' ';
223: }
224:
225: return $outstr;
226: }
参考書籍
参考サイト
- シフトJISコードと ASCIIコードの共存:ぱふぅ家のホームページ
- EUC-JP と Linux:ぱふぅ家のホームページ
- JIS X 0212 と JIS X 0213:ぱふぅ家のホームページ
- ISO-2022-JP と電子メール:ぱふぅ家のホームページ
- Unicode=古今東西のあらゆる文字を収録:ぱふぅ家のホームページ
- UCS と UTF:ぱふぅ家のホームページ
そこで今回は、入力したテキストを、JISコード、シフトJISコード、EUC-JPコード、UCS-4、UTF-16、UTF-8、ISO-2022-JP で表したときの文字コードを一覧表示するPHPプログラムをつくってみることにする。
(2021年7月11日)PHP8対応,リファラ・チェック改良