痒い所に手が届かないmb_substr

PHPの関数、mb_substrは指定した文字数分だけ対象の文字列から抜き出すことが可能という便利な関数です。しかしながら、個人的にはちょっとした不満が…

「大文字と小文字を区別して抜き出すことが不可能」という点です。

つまりは大文字を1文字、小文字を0.5文字として抜き出すことが不可能です。

 

そこで関数を作ってみた!

まず今回の関数は、

「半角を0.5文字、全角を1文字」

という設定ですが、実際の処理としては

「半角を1文字、全角を2文字」

として扱っています。

まずはオフセットの文字数までカウントします。

この時鍵となるのがこの部分。

strlenはバイト数をカウントしているため、全角の場合は文字数と違う数値が返されます。

しかし、mb_strlenは全角でも文字数を返すため、

  • この二つの値が一致する場合は半角
  • 一致しない場合は全角

として、全角の場合は文字数を数えている変数 $i をインクリメントします。

そして、文字列の切り出しの部分も同じです

この行で1文字を取得して、後はその値が半角化全角かを確認して文字数のカウントを進めていくだけです。

そして、最後に切り出された文字数を返しています。

 

今回のブログ曲

今回投稿中に聴いていた曲はこちら

カテゴリー: PHPプログラミング

コメントを残す

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