ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP:文字列のバイト数で処理を分ける方法(2)

より短いコードにする方法がありました。

f:id:AJYA:20150618053938j:plain
photo credit: Elephpant needs a drink via photopin (license)

以前、文字列のバイト数で処理を分ける方法として、Shift-JISに変換してから判定する方法を書きました。ajya.hatenablog.jp

先日文字列処理の関数を探していたら、mb_strwidth()という関数があったので試してみると、文字コード変換なしで目的の動作をしてくれました。
PHP: mb_strwidth - Manual

試したコードは以下のとおりです。

$work= "12あいうえおかきくけこさしすせそたちつてと漢字混合";
$workLen = mb_strwidth($work, "UTF-8");
if($workLen > 44) {
    // 特定のバイト数を超えた場合の処理
}

これで以前のコードより短くすることができました。

この方法には欠点があるようで、以下のサイトによると文字によっては意図したとおりの結果にならないようです。php.birdlab.com
今回のコードを利用するシステムでは、記号は使われても「・」くらいなので、意図したとおりの結果にはなると判断して利用することにしました。