全角を半角にする。
php で日本語の英数字(A-Z)を半角にしたいときは、文字コードのコードポイントを用いた計算ができる。
英数字だけを半角にしたいとき。
<?php $v = 'Microso' $v = preg_replace_callback('/[A-Za-z0-9]/u',function($s){ $s = IntlChar::chr(IntlChar::ord($s[0]) - 0xFEE0); return $s; },$v);
通常であれば mb_convert_kana
mb_convert_kana でもいいのだけれど、記号が変換されてしまう。
<?php $v = 'Microso' mb_convert_kana( $v , 'a')
ord ではなく、IntlChar::ordを使う理由
IntlChar::ord
が必須。ord()はユニコード(utf8) の文字コードを計算できない。
配列の全てを半角にするには
filter_vars を使うと便利
<?php $arr_group =filter_var($section_group, FILTER_CALLBACK, ['options' => function ($v) { $v = preg_replace_callback('/[A-Za-z0-9]/u',function($s){ $s = IntlChar::chr(IntlChar::ord($s[0]) - 0xFEE0); return $s; },$v); return $v; }]);
全角半角の置換
全角半角の英数字の置き換えは、Unicodeの文字コードポイントをだして、 cp - 0xFEE0
をすればいい。これを覚えておけば、他のプログラム言語でも対応が可能になる。