PHPで全角カタカナを半角にする

(1/1)
PHPの組み込み関数  mb_convert_kana  を使い、全角かな文字を半角文字に変換することができる。ところが、全角カタカナのみを半角に変換したい――たとえば「コンピュータ」は半角に変換したいが、「こんぴゅーた」は全角のままでよい――という場合、困ったことが起きる。JISコード上、長音記号「」は1つしかなく、これがカタカナ文字として認識されてしまうため、半角変換されてしまうのだ。
そこで今回は、長音記号を含め、全角カタカナ文字のみを半角に変換するプログラムを作ってみることにする。

(2021年5月30日)PHP8対応,大幅改訂

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

PHPで全角カタカナを半角にする

サンプル・プログラム

圧縮ファイルの内容
katakana2hankaku.phpサンプル・プログラム本体。

変換ルール

まず、問題の長音記号「」の変換ルールを決めておく。

ここでは、

直前文字がカタカナ文字なら、それに続く長音記号を半角に変換する


というルールにする。

サンプル・プログラムの解説

0148: /**
0149:  * 全角カタカナを半角に変換
0150:  * @param   string $instr変換前文字列
0151:  * @return  string変換後文字列
0152: */
0153: function katakana2han($instr) {
0154:     $flag = FALSE;           //直前文字が全角カタカナならTRUE
0155:     $len = mb_strlen($instr);
0156:     $ofst = 1;
0157:     $outstr = '';
0158: 
0159:     for ($ofst = 0; $ofst < $len$ofst++) {
0160:         $ch = mb_substr($instr$ofst, 1);
0161:         if ($ch == '') {
0162:             if ($flag)  $outstr .= '';      //カタカナの長音記号
0163:             else        $outstr .= $ch;
0164:         } else if (mb_ereg_match('[ァ-ヶ]+', $ch)) {   //カタカナの範囲
0165:             $outstr .= mb_convert_kana($ch, 'k');
0166:             $flag = TRUE;
0167:         } else {
0168:             $outstr .= $ch;
0169:             $flag = FALSE;
0170:         }
0171:     }
0172:     return $outstr;
0173: }

変換処理はユーザー関数 katakana2han で行う。

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

関数  mb_ereg_match  で指定する正規表現や、表示部分の HTML処理については、当サイトの「PHPで正規表現」を参考にしてほしい。

参考サイト

(この項おわり)
header