PHPの関数 mb_convert_kanaによる英数字変換の挙動

PHPのmbstring関数の一つ mb_convert_kana()は、全角文字と半角文字の変換を行う大変便利な関数だ。
しかし、英数字の全角半角変換に関しては注意しなければならない点が有る。


mb_convert_kana()では変換オプションを指定することで様々な文字の変換が可能だ。
そのうち、全角英数字から半角への変換に関するオプションは以下のものがある。

r   「全角」英字を「半角」に変換します。
n   「全角」数字を「半角」に変換します。
a   「全角」英数字を「半角」に変換します("a", "A" オプションに含まれる文字は、U+0022, U+0027, U+005C, U+007Eを除く U+0021 - U+007E の範囲です)。
PHPマニュアル日本語版より引用
一見すると、aオプションと rn(nr)オプションは同等かのように思えるが、実はそうではない。
aオプションの「U+0022, U+0027, U+005C, U+007Eを除く U+0021 - U+007E の範囲」という所がポイントなのだ。

aオプションを指定した場合は ”’¥~ を除くASCII記号も変換されるのである。
つまり、下記の記号が全て半角への変換対象となる。

!#$%&()*+,-./:;<=>?@[]^_`{|}

一方、rオプションはa-z及びA-Z、nオプションは0-9の数字のみを変換する為、rn(nr)オプションを指定した場合には記号の変換は一切行われない。

以上の事はもちろん、半角から全角への変換についても同様である。

なお、aオプションを用いて変換を行った場合は上記の通り &<> なども変換される為、意図しないタグが生成されセキュリティホールや誤動作の原因になり得る。使用の際は細心の注意が必要だろう。

PHP5.1.2(Windows版)の mb_convert_kana()関数で確認。

テーマ: PHP - ジャンル: コンピュータ

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://itpc.blog87.fc2.com/tb.php/24-27222ba1
この記事にトラックバック(FC2ブログユーザ用)