【全角対応】文字列の右を空白で埋めて固定長(等幅)にする【php】





オンラインショップなどのメールでは、HTMLメールも増えてきましたが、日本の場合は受注メールを別の会計システムに取り込むなどの要請から、まだまだTEXTメールが主流です。で、そのさいに等幅フォントで文章体裁を整えるときに、空白で文字の幅を整えたい時があります。

で、そのさいに使う関数を作成したので自分用にメモしておきます。

/**
 * 文字列を空白で埋めて固定長にする
 * ※文字コードはUTF-8
 */
function mb_str_pad($s, $l)
{
  $s = mb_convert_kana($s, 'ASKV');
  $a = preg_split("//u", $s);
  while (count(arraY_values($a)) <= $l) {
    $a[] = ' ';
  }
  return implode('', $a);
}

使い方としては以下のように使います。

$成形済みの文字列 = mb_str_pad($成型前の文字列,  $揃えたい長さ);

もし、成型前の文字列が、揃えたい長さよりも長い場合には、そのまま成型前の文字列が返ってきます。

この関数のポイント – どこが全角対応なのか

普通、phpで文字列を分割するときは explode() 関数を使うんですが、こいつは日本語や絵文字に対応してなくて、上手く分割することができません。

そこで、この関数では正規表現による分割、かつ「文字列をUTF-8として解釈する」というフラグを付けることによって、絵文字や全角文字でも正しく1文字づつ分割できるようにしています。

参考になれば幸いです。


カテゴリーPHP

質問・コメントなどあると嬉しいです