Webアプリケーション開発において、ユーザーがフォームに入力したデータの表記揺れを統一(正規化)する処理は欠かせません。
特に、電話番号や郵便番号、氏名のフリガナなどで、全角と半角の文字が混在してしまうケースは非常に多くあります。
このような表記揺れを放置すると、データベースでの検索がうまくいかなかったり、バリデーションでエラーになったりと、様々な不具合の原因になりかねません。
PHPには、こうした全角・半角の文字種変換を簡単に行うための強力な関数が用意されています。
この記事では、PHPで全角・半角を変換するための標準的な手法であるmb_convert_kana
関数について、その基本的な使い方から多様な変換オプションまで、豊富なサンプルコードと共に徹底的に解説します。
【本記事の信頼性】
- 執筆者は元エンジニア
- 大手プログラミングスクールのWebディレクター兼ライターを経験
- 自らも地元密着型のプログラミングスクールを運営
受講生から評判の良いプログラミングスクール
スクール |
特徴 |
受講料金 |
大手比較サイトで4年連続人気NO.1!受講生からの評判も非常に高く、Web系のエンジニアを目指すならRUNTEQ一択。 | 550,000円(給付金適用あり) | |
月単価80万円以上の現役エンジニア講師による指導!一度入会すればサポートは半永久的。 | 498,000円 | |
格安で質の高いWeb制作スキルを習得したい人におすすめ!業界最安級の料金でありながら、コミュニティやサポートが充実。 | 129,800円~ | |
完全無料でプログラミングが学べる貴重なスクール!最短1ヶ月で卒業可能。ゼロスク運営会社への就職もできる。 | 無料 | |
長期間に渡って学習し、希少人材を目指す人に最適なスクール!受講料は高いものの、高収入を得られる人材を目指せる。 | 96~132万円 |
結論:PHPで全角・半角の変換をするにはmb_convert_kana関数を使う
PHPで全角文字と半角文字を相互に変換する場合、結論から言うとmb_convert_kana
関数を使うのが最も簡単で確実な方法です。
この関数は、PHPのマルチバイト文字列拡張モジュール(mbstring)に含まれるもので、ひらがな・カタカナの変換も含め、日本語の文字種変換に関するほとんどのニーズをこの関数一つで満たすことができます。
基本的な構文は以下の通りです。
mb_convert_kana(string $string, string $option, ?string $encoding = null): string
- 第1引数
$string
: 変換したい元の文字列を指定します。 - 第2引数
$option
: どのような変換を行うかを指定するオプション文字列です。これが最も重要な部分になります。 - 第3引数
$encoding
: 文字列のエンコーディングを指定します。省略可能ですが、通常は'UTF-8'
などを明示的に指定することが推奨されます。
それでは、具体的な使い方を見ていきましょう。
mb_convert_kanaの基本的な使い方
mb_convert_kana
の強力さは、第2引数に指定するオプションの豊富さにあります。
ここでは、最もよく使われる全角・半角の相互変換について解説します。
全角から半角への変換
ユーザーに入力された英数字やカタカナを、データベースに保存する前に半角に統一する、といったケースでよく利用されます。
サンプルコード
<?php
$zenkaku_string = 'PHP入門 Vol.123';
// 「a」: 全角英数字を半角に
// 「s」: 全角スペースを半角に
$hankaku_string = mb_convert_kana($zenkaku_string, 'as');
echo $hankaku_string;
?>
実行結果
PHP入門 Vol.123
ソースコードの解説
この例では、第2引数のオプションに'as'
と指定しています。
これは、「alphabet(英数字)」と「space(スペース)」を全角から半角に変換せよ、という意味になります。
このように、変換したい対象を示すオプション文字を連結して指定することで、複数の種類の文字を一度に変換することが可能です。
元の文字列に含まれていた全角のPHP
やVol.123
、そして
(全角スペース)が、すべて半角に変換されているのが分かります。
半角から全角への変換
逆に、表示の見た目を整えるために、半角のカタカナを全角に統一したい、といったケースで使われます。
サンプルコード
<?php
$hankaku_string = 'PHP入門 ヴォリューム 123';
// 「A」: 半角英数字を全角に
// 「K」: 半角カタカナを全角に
// 「V」: 濁点付きの文字を1文字として扱う
$zenkaku_string = mb_convert_kana($hankaku_string, 'AKV');
echo $zenkaku_string;
?>
実行結果
PHP入門 ヴォリューム 123
ソースコードの解説
今度はオプションに'AKV'
と指定しました。大文字の'A'
は半角英数字を全角に、'K'
は半角カタカナを全角に変換するオプションです。
'V'
は少し特殊で、ヴ
のような濁点・半濁点付きのカタカナを、結合して1文字のヴォ
として正しく変換するために指定します。
このオプションがないと、文字が分離してしまうことがあるため、半角カタカナを全角にする際は'K'
と'V'
をセットで使うのが良いでしょう。
mb_convert_kanaの変換オプション一覧
mb_convert_kana
には、ここで紹介したもの以外にも多くの変換オプションが用意されています。
目的に応じて使い分けられるように、主要なものを一覧表にまとめました。
オプション | 説明 |
---|---|
r |
「全角」英字を「半角」に変換します。 |
R |
「半角」英字を「全角」に変換します。 |
n |
「全角」数字を「半角」に変換します。 |
N |
「半角」数字を「全角」に変換します。 |
a |
「全角」英数字を「半角」に変換します。(r とn のエイリアス) |
A |
「半角」英数字を「全角」に変換します。(R とN のエイリアス) |
s |
「全角」スペースを「半角」に変換します。 |
S |
「半角」スペースを「全角」に変換します。 |
k |
「全角」カタカナを「半角」に変換します。 |
K |
「半角」カタカナを「全角」に変換します。 |
h |
「全角」ひらがなを「半角」カタカナに変換します。 |
H |
「半角」カタカナを「全角」ひらがなに変換します。 |
c |
「全角」カタカナを「全角」ひらがなに変換します。 |
C |
「全角」ひらがなを「全角」カタカナに変換します。 |
V |
濁点付きの文字を1文字として扱います。(K やH と併用) |
ひらがなとカタカナの相互変換
mb_convert_kana
は、全角・半角の変換だけでなく、ひらがなとカタカナの相互変換も得意です。
氏名のフリガナ入力をカタカナに統一する、といった処理で頻繁に利用されます。
サンプルコード
<?php
$hiragana = 'やまだたろう';
$katakana = 'ヤマダタロウ';
// ひらがなをカタカナに変換 (オプション 'C')
$converted_katakana = mb_convert_kana($hiragana, 'C');
// カタカナをひらがなに変換 (オプション 'c')
$converted_hiragana = mb_convert_kana($katakana, 'c');
echo 'ひらがな → カタカナ: ' . $converted_katakana;
echo "<br>";
echo 'カタカナ → ひらがな: ' . $converted_hiragana;
?>
実行結果
ひらがな → カタカナ: ヤマダタロウ
カタカナ → ひらがな: やまだたろう
オプション'C'
でひらがなからカタカナへ、小文字の'c'
でカタカナからひらがなへと、簡単に変換できました。
注意点:文字エンコーディングの指定
mb_convert_kana
関数の第3引数$encoding
は省略可能ですが、コードの堅牢性を高めるために、可能な限り指定することをおすすめします。
この引数を省略した場合、PHPはmb_internal_encoding()
で設定されている内部文字エンコーディング、またはphp.ini
の設定に基づいて動作します。
しかし、サーバー環境が変わるとこの設定も変わり、意図しない文字化けを引き起こす可能性があります。
<?php
$string = 'テスト';
// UTF-8であることを明示的に指定する
$result = mb_convert_kana($string, 'as', 'UTF-8');
?>
このように、'UTF-8'
のような標準的なエンコーディングを明示的に指定することで、どのような環境でもコードが一貫して動作することを保証できます。
まとめ
今回は、PHPで全角文字と半角文字、そしてひらがなとカタカナを自在に変換するmb_convert_kana
関数について詳しく解説しました。
なお、PHPを体系的に学んだり、PHPのスキルを高めたりするためには、プログラミングスクールを利用するのも有効です。
細かな疑問がすぐに解決するだけでなく、現役エンジニアが「質の高いポートフォリオ」を作成するための手助けをしてくれたり、エンジニア就職・転職のコツを教えてくれたりするなど、様々なメリットがありますので、独学に疲れた方は検討してみてはいかがでしょうか。