「カタカナ → ひらがな」でやりたいこと
まずゴールをはっきりさせます。
「カタカナで書かれた文字列」を、「同じ読みのひらがな」に変換したい。
例えば、こんな文字列があるとします。
ヤマダ タロウ
カタカナ
スーパー
これをプログラムでこう変えたいわけです。
やまだ たろう
かたかな
すーぱー
検索用に「ひらがなに統一したい」ときや、
かな入力の揺れを吸収したいときに、とても役に立つユーティリティです。
PHP で「カタカナ → ひらがな」をする基本:mb_convert_kana
mb_convert_kana という万能変換関数
ここでも主役は mb_convert_kana() です。
string mb_convert_kana(
string $string,
string $option = "",
?string $encoding = null
)
PHP第2引数の「オプション」で、「何をどう変換するか」を細かく指定できます。
カタカナ → ひらがな変換に関係するのは、この2つです。
'c':全角カタカナ → 全角ひらがな'C':全角ひらがな → 全角カタカナ
つまり、今回やりたいのは「'c' を使う」ことです。
まずはシンプルな「カタカナ → ひらがな」変換
一番基本の例
$text = "ヤマダタロウ";
$hiragana = mb_convert_kana($text, 'c', 'UTF-8');
echo $hiragana;
// やまだたろう
PHPここでのポイントは3つです。
- 第1引数:変換したい文字列
- 第2引数:
'c'(カタカナ → ひらがな) - 第3引数:
'UTF-8'(エンコーディングを明示)
これだけで、「全角カタカナ」を「全角ひらがな」に変換できます。
スペースや記号はそのまま残る
$text = "ヤマダ タロウ(カタカナ)";
$hiragana = mb_convert_kana($text, 'c', 'UTF-8');
echo $hiragana;
// やまだ たろう(かたかな)
PHPカタカナだけがひらがなになり、
スペースや括弧、漢字などはそのまま残ります。
半角カタカナが混ざる場合はどうするか
半角カナ → 全角カナ → ひらがな、という流れ
ユーザー入力には、こういうものも混ざります。
$text = "ヤマダ タロウ";
PHPこれをそのまま 'c' で変換しても、うまくいきません。
なぜなら 'c' は「全角カタカナ → ひらがな」だからです。
そこで、ステップを一つ増やします。
- 半角カタカナ → 全角カタカナ
- 全角カタカナ → ひらがな
これを一気にやるには、オプションを組み合わせます。
'K':半角カタカナ → 全角カタカナ'c':全角カタカナ → ひらがな
つまり、'Kc' です。
半角カナ混じりの例
$text = "ヤマダ タロウ";
$hiragana = mb_convert_kana($text, 'Kc', 'UTF-8');
echo $hiragana;
// やまだ たろう
PHPこれで、
- 半角カタカナ
- 全角カタカナ
どちらで入力されても、最終的に「ひらがな」に統一できます。
実務ユーティリティとして関数にまとめる
「カタカナ(半角・全角) → ひらがな」統一関数
フォーム入力や検索用の前処理として、そのまま使える形にしてみます。
/**
* カタカナ(半角・全角)をひらがなに統一(UTF-8 前提)
*
* @param string $text
* @return string
*/
function toHiragana(string $text): string
{
// 半角カタカナ → 全角カタカナ(K)
// 全角カタカナ → ひらがな(c)
return mb_convert_kana($text, 'Kc', 'UTF-8');
}
PHP使い方はとてもシンプルです。
$raw = $_POST['kana'] ?? '';
$hiragana = toHiragana($raw);
echo $hiragana;
PHPこれで、
- 「ヤマダ」
- 「ヤマダ」
どちらで入力されても、"やまだ" にそろえられます。
何に使うと便利か(実務のシーン)
ひらがな検索の前処理
例えば、「名前の読み」で検索したいとします。
- DB には「ひらがな」で保存している
- ユーザーは「カタカナ」で入力してくるかもしれない
こういうときに、検索前に「ひらがなに統一」しておくと、揺れを吸収できます。
$input = $_GET['yomi'] ?? '';
// 入力をひらがなに統一
$keyword = toHiragana($input);
// あとは、ひらがなで LIKE 検索など
$sql = "SELECT * FROM users WHERE yomi LIKE :keyword";
PHPフリガナの保存形式を「ひらがな」にしたい場合
フリガナを「ひらがなで保存する」設計にしたいときもあります。
- 表示するときは「カタカナ」に変換して出す
- 内部的には「ひらがな」で統一しておく
こうしておくと、「検索」「ソート」「比較」がやりやすくなります。
$rawKana = $_POST['kana'] ?? '';
// まずひらがなに統一して保存
$yomi = toHiragana($rawKana);
// 表示するときだけカタカナに
$display = mb_convert_kana($yomi, 'C', 'UTF-8');
PHPオプションの組み合わせをもう少しだけ深掘り
「Kc」がやっていること
'Kc' は、順番にこう動きます。
'K':半角カタカナ → 全角カタカナ'c':全角カタカナ → ひらがな
つまり、
- 半角カタカナ
- 全角カタカナ
どちらも最終的に「ひらがな」に落ちてきます。
濁点・半濁点の扱い(V オプション)
半角カタカナには、「ガ」「パ」のように「文字+濁点」が分かれているものがあります。'K' だけでも多くの場合はうまく変換されますが、
より厳密にやるなら 'V' を組み合わせることもあります。
'V':濁点・半濁点を結合(「ガ」→「ガ」)
カタカナ → ひらがなで 'KVc' とすることもありますが、
実務では 'Kc' だけで困るケースはあまり多くありません。
必要になったら「V を足す」というイメージで十分です。
まとめ:今日からの「カタカナ → ひらがな」変換の基準
押さえておきたいポイントをコンパクトにまとめます。
- カタカナ → ひらがな変換は、
mb_convert_kanaの'c'オプションで行う。 - 半角カタカナも混ざる可能性が高いので、実務では
'Kc'(半角カナ → 全角カナ → ひらがな)が定番。 - 検索用・保存用に「ひらがなに統一」しておくと、入力の揺れを吸収しやすくなる。
ユーティリティとしては、まずはこの関数を一つプロジェクトに置いておくとかなり使い回せます。
function toHiragana(string $text): string
{
return mb_convert_kana($text, 'Kc', 'UTF-8');
}
PHP