人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでカタカナを半角変換したいと思っています。
普通の文字は問題ないのですが、長音記号が引っかかっています。

たとえば
ゴール → ゴール
ごーる → ごーる
というように長音記号はひらがなでありかたかなであるために、単純に一括返還すると
ごーるのようにひらがなの中の長音も変換されてしまいます。

とても一般的な悩みだと思いますが、検索してもいい解決方法が見つかりませんでした。
方法を教えてください。

●質問者: dingding
●カテゴリ:インターネット ウェブ制作
✍キーワード:PHP ひらがな カタカナ 普通 検索
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●50ポイント ベストアンサー

まず、長音記号の変換ルールの確定させてください。

直前文字がカタカナの場合、カタカナの長音記号とみなし、半角に変換する。

というルールでよろしいでしょうか。


であれば、以下のような関数で変換できます。

引数は変換したい文字列、戻値は変換後の文字列です。

ただし、この関数内では文末判定は行っていないので、文末まで(1行分)を引数としてください。

function katakana2han($instr) {
 $flag = FALSE; //直前文字がカタカナならTRUE
 $len = mb_strlen($instr);
 $ofst = 1;
 $outstr = '';
 for ($ofst = 0; $ofst < $len; $ofst++) {
 $ch = mb_substr($instr, $ofst, 1);
 if ($ch == 'ー') {
 if ($flag) $outstr .= 'ー';
 else $outstr .= $ch;
 } else if (mb_ereg_match('[ァ-ヶ]+', $ch)) {
 $outstr .= mb_convert_kana($ch, 'k');
 $flag = TRUE;
 } else {
 $outstr .= $ch;
 $flag = FALSE;
 }
 }
 return $outstr;
}
◎質問者からの返答

ありがとうございます!

ちなみにこれは

「きたーーーーーー」は変換しないで、「キターーーー」は返還するのでしょうか?


2 ● taku_j_7
●20ポイント

面倒な処理を入れなくとも、関数がありますのでこれを使うと良いと思います。

「mb_convert_kana」

$hoge = mb_convert_kana($hoge, "k");

参考サイト

http://phpspot.net/php/man/php/function.mb-convert-kana.html

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ