久々の更新でございます。
画面から入力された文字列のバイト数をPHPで取得する際にハマったので。
調べてみると、まず最初に目に付くのは「strlen()を使え」と。
しかしながら、環境によっては「strlen()がmb_strlen()にオーバーライドされる」との事。
で、下記のようにすれば取得出来ます、とのエントリを見つけたのでやってみたのですが・・・
$str_length = strlen(bin2hex($data)) / 2;
結果、ダメでした。
検証環境のサーバ設定にもよるのかもだけど、下記のようにバイト数が返却されるので、全角半角が混ざった文字列の場合、正確にバイト数が取得出来なかったのです。
1バイト(半角文字):2バイトの16進数で返却される 2バイト(全角文字):6バイトの16進数で返却される
結局、下記のように1文字ずつ調べて、というベタベタな感じに。
$str_length = 0; for($i=0;$i<mb_strlen($data);$i++) { if(strlen(bin2hex(mb_substr($data, $i, 1))) == 6) { $str_length = $str_length + 2; } else { $str_length = $str_length + 1; } }
もっとうまいやり方はあるんだろうけど、時間も無かったし。。
いずれ修正しよう。