0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHPで文字列を指定バイト数で切り出す方法

Posted at

はじめに

文字列を指定のバイト数で切り出す必要があり作成していたのですが、AIに聞いても想定する回答が返ってこずに苦労したため、備忘録として残します。

コード

切り出す文字列は1文字ずつ削除しています。文字列が長い場合はパフォーマンスが悪くなるためご注意ください。

// 文字列のバイト数を取得する
function getTextByte(string $text): int
{
    $textByteArray = unpack('C*', $text);
    $textByte = count($textByteArray);

    return $textByte;
}

/**
  * 文字列の先頭から、指定バイト数の文字列を切り出す
  *
  * @param string $text 切り出す文字列
  * @param int $byte バイト数。デフォルトは0
  * @param string $encoding 切り出す文字列の文字コード。デフォルトはUTF-8
  *
  * @return string 切り出した文字列
  */
function truncateByBytes(string $text, int $byte = 0, ?string $encoding = 'UTF-8'): string
{
    if ($byte < 0) {
        return '';
    }

    $truncatedText = $text;
    $truncatedTextByte = getTextByte($truncatedText);

    // 切り出すバイト数以下になるまで、最後の1文字を削除する
    while ($truncatedTextByte > $byte) {
        $truncatedText = mb_substr($truncatedText, 0, -1, $encoding);
        $truncatedTextByte = getTextByte($truncatedText);
    }

    return $truncatedText;
}

まとめ

単純な文字数の切り出しは簡単ですが、バイト数での切り出しは少し面倒でした。バイト数は文字コードによって変わるため、その辺りも注意が必要です。

参考記事

バイト数チェックのサイト

最後に

GoQSystemでは一緒に働いてくれる仲間を募集中です!

ご興味がある方は以下リンクよりご確認ください。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?