mb_strcut

関数の概要

mb_strcutはPHPのマルチバイト文字列関数の一つで、指定した文字エンコードに基づいて、文字列をバイト数単位で切り出すための関数です。特にマルチバイト文字(例えば日本語など)を扱う際に、文字の途中で切れて文字化けしないように安全に切り出せる点が特徴です。

パラメータの説明

  • string $string:切り出し対象の文字列。
  • int $start:切り出し開始位置をバイト単位で指定します。負の値も指定可能で、文字列の末尾から数えます。
  • int|null $length:切り出すバイト数を指定します。省略すると開始位置から最後まで切り出します。
  • string|null $encoding:文字列のエンコードを指定します。省略すると内部文字エンコーディングが使用されます。

戻り値

指定した開始バイト位置から指定バイト数分だけ切り出した文字列を返します。切り出し位置や長さが文字の途中にあたる場合でも、マルチバイト文字が正しく切り出され、文字化けを防ぎます。

使用例

基本的な使い方

<?php
$str = "こんにちは世界";
$result = mb_strcut($str, 0, 9, "UTF-8");
echo $result; // こんにちは
?>

この例では「こんにちは世界」という日本語の文字列から先頭0バイト目から9バイト分を切り出しています。UTF-8では1文字あたり3バイトなので、9バイトはちょうど「こんにちは」(5文字分)になります。

開始位置を指定して切り出す

<?php
$str = "こんにちは世界";
$result = mb_strcut($str, 9, 6, "UTF-8");
echo $result; // 世界
?>

開始位置を9バイト目から6バイト切り出すことで、「こんにちは」の後の「世界」を取得しています。

長さを省略して末尾まで切り出す

<?php
$str = "Hello こんにちは";
$result = mb_strcut($str, 6, null, "UTF-8");
echo $result; // こんにちは
?>

開始位置を6バイト目にして長さを指定しない場合、そこから文字列の末尾まで切り出します。この例では英語の「Hello 」の次の部分「こんにちは」が取得できます。

負の開始位置を使う例

<?php
$str = "abcdefg";
$result = mb_strcut($str, -3, null, "UTF-8");
echo $result; // efg
?>

開始位置に負の値を指定すると、文字列の末尾からのバイト位置になります。この例では末尾から3バイト目から末尾まで切り出しています。

関連する関数

  • mb_substr:文字数単位で文字列を切り出す。バイト数での切り出しとは異なり、何文字目から切るかを指定。
  • substr:バイト単位で文字列を切り出すが、マルチバイト文字列では文字化けの可能性あり。
  • mb_strlen:マルチバイト文字列の文字数を取得。
  • mb_strpos:マルチバイト文字列の文字単位での位置を検索。

まとめ

mb_strcutはマルチバイト文字列を扱う際に、バイト数指定で安全に文字列を切り出すための便利な関数です。文字数ではなくバイト単位で切り出す必要がある実務シーンで特に役立ちます。指定したバイト数が文字の途中の場合でも自動的に正しい文字単位に調整されるので、文字化けや不正な文字列生成を防げます。UTF-8やその他のエンコーディングを扱う際に、ぜひ活用してください。