オンラインショップなどのメールでは、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文字づつ分割できるようにしています。
参考になれば幸いです。