[php] mb_convert_kana で全角文字を半角文字に変換する

By | 2018年5月13日

フォームで送信されるデータの中には、全角文字ではなく半角文字で送られることが望ましい文字列があります。

例えば、数値は全角ではなく半角で処理を行うのが普通です。

PHPには、全角文字を半角文字に変換する関数である mb_convert_kana があります。

今回はこの関数を利用した数値の全角→半角変換についてと、この関数の注意点について紹介します。

全角数字を半角数字にする

例えば、以下のような全角の数値を半角に変換したいとします。

19800

これを半角に変換するには mb_convert_kana を使って以下のように書きます。

mb_convert_kana("19800", "n");

mb_convert_kana の第一引数には、変換したい文字列を指定し、第二引数には変換するタイプを指定します。

戻り値に変換後の文字列が渡されるため、実際に表示する場合は以下のように書きます。

echo mb_convert_kana("19800", "n"); //結果: 19800

今回、第二引数に指定した n は「全角数字を半角数字にする」という指定です。他には以下のようなオプションがあります。

オプション 変換形式
r 全角英字→半角英字
R 半角英字→全角英字
n 全角数字→半角数字
N 半角数字→全角数字
a 全角英数字→半角英数字
A 半角英数字→全角英数字
s 全角スペース→半角スペース
S 半角スペース→全角スペース
k 全角カタカナ→半角カタカナ
K 半角カタカナ→全角カタカナ
h 全角ひらがな→半角カタカナ
H 半角カタカナ→全角ひらがな
c 全角カタカナ→全角ひらがな
C 全角ひらがな→全角カタカナ
V 濁点付きの半角文字→1文字の全角文字(KまたはHと同時に使用)

小文字のオプションは全角から半角への変換、大文字のオプションは半角から全角への変換を意味します。

オプションは複数同時に指定することができます。例えば、全角の英数字とスペースを含む文字列を全て半角にする場合は以下のように書きます。

mb_convert_kana("This is 0123", "as"); // 結果: This is 0123

オプション as を同時に指定しました。

半角にできない記号

mb_convert_kana では、一部半角に変換できない記号があります。

以下のPHPスクリプトは、様々な文字列と記号を半角に変換しようとするものです。

配列 $letters に入れた文字(記号)を半角に変換しています。成功した場合は OK と表示されます。

<?php
mb_internal_encoding("utf-8");

$letters = array(
	"あいうえお", 
	"カキクケコ", 
	"がぎぐげご", 
	"12345", 
	"!", 
	"@", 
	"#", 
	"$", 
	"%", 
	"^", 
	"&", 
	"*", 
	"(", 
	")",
	"{", 
	"}", 
	"「", 
	"」", 
	"<", 
	">", 
	"、", 
	"。", 
	",", 
	".", 
	"_", 
	"+", 
	"ー", 
	"¥",
	":", 
	";", 
	"”", 
	"’", 
	"|", 
	"・", 
	"?", 
	"〜");

foreach ($letters as $letter) {
	$original = $letter;
	$converted = mb_convert_kana($letter, "askhc");
	$isSuccess = ($original != $converted) ? "OK" : "NG";

	echo $original . " → " . $converted . " (" . $isSuccess . ")<br>";
}
?>

このスクリプトの結果は以下のようになります。

あいうえお → アイウエオ (OK)
カキクケコ → カキクケコ (OK)
がぎぐげご → ガギグゲゴ (OK)
12345 → 12345 (OK)
! → ! (OK)
@ → @ (OK)
# → # (OK)
$ → $ (OK)
% → % (OK)
^ → ^ (OK)
& → & (OK)
* → * (OK)
( → ( (OK)
) → ) (OK)
{ → { (OK)
} → } (OK)
「 → 「 (OK)
」 → 」 (OK)
< → < (OK)
> → > (OK)
、 → 、 (OK)
。 → 。 (OK)
, → , (OK)
. → . (OK)
_ → _ (OK)
+ → + (OK)
ー → ー (OK)
¥ → ¥ (NG)
: → : (OK)
; → ; (OK)
” → ” (NG)
’ → ’ (NG)
| → | (OK)
・ → ・ (OK)
? → ? (OK)
〜 → 〜 (NG)

半角への変換がNG(失敗)となった記号が4つあります。

  • シングルクォーテーション(’)
  • ダブルクォーテーション(”)
  • 円記号(¥)
  • 波線(〜)

これらの記号を半角に変換するには、別の仕組みを使う必要があるようです。

参考

PHP: mb_convert_kana - Manual

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です