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

サンプル・プログラム
katakana2hankaku.php | サンプル・プログラム本体。 |
変換ルール

ここでは、
直前文字がカタカナ文字なら、それに続く長音記号を半角に変換するというルールにする。
サンプル・プログラムの解説
148: /**
149: * 全角カタカナを半角に変換
150: * @param string $instr 変換前文字列
151: * @return string 変換後文字列
152: */
153: function katakana2han($instr) {
154: $flag = FALSE; //直前文字が全角カタカナならTRUE
155: $len = mb_strlen($instr);
156: $ofst = 1;
157: $outstr = '';
158:
159: for ($ofst = 0; $ofst < $len; $ofst++) {
160: $ch = mb_substr($instr, $ofst, 1);
161: if ($ch == 'ー') {
162: if ($flag) $outstr .= 'ー'; //カタカナの長音記号
163: else $outstr .= $ch;
164: } else if (mb_ereg_match('[ァ-ヶ]+', $ch)) { //カタカナの範囲
165: $outstr .= mb_convert_kana($ch, 'k');
166: $flag = TRUE;
167: } else {
168: $outstr .= $ch;
169: $flag = FALSE;
170: }
171: }
172: return $outstr;
173: }

変換したい文字列 $instr を、関数 mb_substr を使って左から1文字ずつ取り出し、長音記号かどうか検査する。
もし長音記号だったら、直前文字が全角カタカナの場合に TRUE となるフラグ変数 $flag を見て、半角変換するかどうか判断する。
長音記号以外の場合は、関数 mb_ereg_match を使って、全角カタカナ文字なら関数 mb_convert_kana を使って半角に変換し、変数 $flag に TRUE を代入する。
それ以外の場合は、変換せずに、変数 $flag に FALSE を代入する。

関数 mb_ereg_match で指定する正規表現や、表示部分の HTML処理については、当サイトの「PHPで正規表現」を参考にしてほしい。
参考サイト
- PHPで日本語テキストを正規化:ぱふぅ家のホームページ
そこで今回は、長音記号を含め、全角カタカナ文字のみを半角に変換するプログラムを作ってみることにする。
(2021年5月30日)PHP8対応,大幅改訂