入力フォームのタイトルに例えば、「タイトルを入力してください。50バイトまで」と表記したところで、初心者はバイトって何?と思われてしまう。 UTF-8な環境が主流になりつつ現在、入力された文字の長さを測ることは困難であるが、それでもエラー対応をするためにある程度は文字入力の制限をしなければならない。
http://yanok.net/2012/08/post-226.html を見ると、文字数制限のやっかいさについて書かれているが今回はphpで実装されている文字のカウントについてまとめてみる。
文字 | 幅 |
U+0000 - U+0019 | 0 |
U+0020 - U+1FFF | 1 |
U+2000 - U+FF60 | 2 |
U+FF61 - U+FF9F | 1 |
U+FFA0 - | 2 |
さて、どれを使えば理想かというと、ユーザ視点で考えれば、2か3かもしれない。1は多めにデータベースの型のカラムをとっておけば対応できる。 と思って2や3のみで対応すると、改行をたくさん入れられた際に文字数0、バイト数(7行であれば14)バイトとでてしまい、データベースの型のフィールドにうまく収まらない可能性がある。ということで入力チェックを1と2で対応するのがよく3はあまり使わない・・・カモ。そんなコードをあまり見たことがない・・・。
<?php $hoge = $_POST["hoge"]; $error = ''; if(strlen($hoge) > 255) $error .= '255バイトを超えています。<br>';/*textarea等に使用*/ if(mb_strlen($hoge) > 60) $error .= '60文字以内にしてください<br>'; if(mb_strwidth($hoge) > 40) $error .= 'もう少し幅を小さくしてください?<br>';/*これあんまり使わない*/ print $error; if($error == ''){ 処理プログラム。 } ?>