文字数を計算して、指定以上の文字数ならエラー出すの処理で引っかかったのでメモ
####1.phpでの文字数検知####
使ってみた検知用の関数は、以下2つ
icov_strlen(str)
与えられたバイト列 str 中に現れる文字の数を 指定された文字セットに基づいて数えます。この結果は、必ずしも文字列の バイト数と一致するとは限りません。
本家リンクより
mb_strlen(string $str [, string $encoding = mb_internal_encoding() ])
文字列の長さを取得します。
本家リンクより
####2.動作検証####
以下のコードで実行してみました。ターミナルで実行すると文字コード見られないので、
htmlのbodyの中入れて、ブラウザで検証します。
hoge.php
$characters = array(
"test&",
"テスト",
"♡"
);
for($i = 0; $i < count($characters); $i++){
echo $characters[$i]."<br>";
echo "iconv_strlenでの文字数 :".iconv_strlen($characters[$i])."<br>";
echo "mb_strlen(utf-8なし)文字数 :".mb_strlen($characters[$i])."<br>";
echo "mb_strlenでの文字数 :".mb_strlen($characters[$i],"utf-8")."<br><br>";
}
####3.結果####
test&
iconv_strlenでの文字数 :5
mb_strlen(utf-8なし)文字数 :5
mb_strlenでの文字数 :5
テスト
iconv_strlenでの文字数 :9
mb_strlen(utf-8なし)文字数 :9
mb_strlenでの文字数 :3
♡
iconv_strlenでの文字数 :3
mb_strlen(utf-8なし)文字数 :3
mb_strlenでの文字数 :1
mb_strlenはutf-8を追加しないと、欲しい結果をくれないことがわかりました。
####4.まとめ####
全角や半角を区別したい場合
icov_strlen(文字);
全角か半角のどちらでも1文字なのか判断したい場合
mb_strlen(文字,"utf-8");