文字列の"幅"を取得

mb_strwidth関数があるのだけれど、文字コードマッピングの違いによって期待する値が返ってこないことがあるらしい(http://ns1.php.gr.jp/pipermail/php-users/2005-October/027806.html)。それも困るので、取得するための関数を作っておく。

function getStrWidth($str)
{
  $enc = mb_internal_encoding();
  if ($enc != 'EUC-JP') {
    $str = mb_convert_encoding($str, 'EUC-JP', $enc);
  }
  $b = unpack('C*', $str);
  return count($b);
}