PHPでのバイト数の取得方法について

Pocket
このエントリーをはてなブックマークに追加

久々の更新でございます。

画面から入力された文字列のバイト数を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;
  }
}

もっとうまいやり方はあるんだろうけど、時間も無かったし。。

いずれ修正しよう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です