忍者ブログ

STEP UP BLOG

Home > ブログ > > [PR] Home > ブログ > php > マルチバイト文字対応のwordwrap()

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

マルチバイト文字対応のwordwrap()

PHPの文字列関数にはかゆいところに手が届く便利な関数が多々あります。
しかし!!
そういう便利な関数(言いようによっては使い道が限定される関数)に限ってマルチバイト文字対応していない。。。
ということで、結局自作しなければならないわけですが、
先日初めて知った関数にwordwrap()という関数がありました。

http://php.net/manual/ja/function.wordwrap.php

指定した文字数で、指定した文字を用いて文字列を分割します。

その通りなのですが、具体例を挙げると、
改行の入っていない長文を100文字ずつに分割して、それぞれに改行文字を追加するというようなことが可能なわけです。
さらに、そもそものPHPがHTMLを出力するための言語として生まれた性質からか、
分割する際に、単語を分割するかどうかも設定できます。
その辺りはマニュアルを参照していただくとわかると思います。

で、こちらのwordwrap()はご想像通り、マルチバイト文字に対応していない。
で、いろんな人が自作mb_wordwrap()を作っていたので、
私も便乗して作ってみました。
しかし、単語を分割するかしないかの判別まで含めると途端に難易度がエベレスト並になるのでそこは含めません。
function mb_wordwrap($string, $width, $break)
{
    $result = [];
    $tmp_str = '';
    $i = 0;
    while (mb_strlen($tmp_str) < mb_strlen($string)) {
        $str = mb_substr($string, $i*$width, $width);
        $result[] = $str;
        $tmp_str .= $str;
        $i++;
    }

    return implode($break, $result);
}

改良余地というか、wordwrap()の仕様漏れがありそうで不安ですが。。。
PR

Comment0 Comment

Comment Form

  • お名前name
  • タイトルtitle
  • メールアドレスmail address
  • URLurl
  • コメントcomment
  • パスワードpassword

PAGE TOP