PHP

PHPで文字列を丸める処理3パターン「文字幅」「文字数」「バイト数」

More than 1 year has passed since last update.


目的

出来るだけサイズ制限ギリギリまで入力を許して,それをはみ出るタイミングで を末尾に付与したい。但し,それを付与してもサイズ制限を超過しないようにうまく計算する。

(例) あいうえお → 最大4文字までで丸める → あいう…


最大文字幅 $width までで丸める

素直にそのまま使うだけ。但し a が 幅1 で が 幅2 なのに 👪 が幅1 だったりするので謎。見た目の用途だと基本CSS使うのであんまり出番はないかも。

(関連)mb_strimwidth関数なんて必要なかった(?) - Qiita


最大文字数 $length までで丸める

素直にこのあたり使うだけ。

function truncate(string $input, int $length = -1, string $trimMarker = '…'): string

{
// 無制限またはサイズ内
if ($length < 0 || mb_strlen($input, 'UTF-8') <= $length) {
return $input;
}

// $trimMarker だけで $length を超えている
if (mb_strlen($trimMarker, 'UTF-8') > $length) {
return '';
}

return mb_substr($input, 0, $length - mb_strlen($trimMarker, 'UTF-8')) . $trimMarker;
}


最大バイト数 $capacity までで丸める

知らない人も多いであろうマイナー関数。自分も今日久々に思い出しました。最大ペイロード長がバイト数で制限されているときとかに超便利。

function truncate(string $input, int $capacity = -1, string $trimMarker = '…'): string

{
// 無制限またはサイズ内
if ($capacity < 0 || strlen($input) <= $capacity) {
return $input;
}

// $trimMarker だけで $capacity を超えている
if (strlen($trimMarker) > $capacity) {
return '';
}

return mb_strcut($input, 0, $capacity - strlen($trimMarker)) . $trimMarker;
}