mb_strpos

関数の概要

mb_strpos関数は、マルチバイト文字列内で特定の文字列が最初に現れる位置を検索するための関数です。単純なstrpos関数と異なり、UTF-8やその他のマルチバイトエンコーディングに対応しているため、日本語などの多バイト文字を正しく扱えます。PHPのマルチバイト文字列を扱う際に非常に便利な関数です。

パラメータの説明

  • $haystack:検索対象のマルチバイト文字列を指定します。
  • $needle:検索する文字列を指定します。単一の文字でも文字列でも構いません。
  • $offset(省略可能):検索開始位置を指定します。負の値も指定可能で、文字列の末尾からの位置を表します。デフォルトは0です。
  • $encoding(省略可能):文字列のエンコーディングを指定します。指定しない場合はmb_internal_encoding()の設定値が使われます。

戻り値

見つかった場合はマルチバイト文字単位の位置(0から始まる)を整数で返します。
見つからなかった場合は FALSE を返します。
注意点として、位置0はFALSEと等しくないため、厳密比較(===)で結果を判定してください。

使用例

基本的な使い方

<?php
$text = "こんにちは、世界!";
$pos = mb_strpos($text, "世");
var_dump($pos); // 結果: int(6)
?>

「こんにちは、世界!」の中で「世」が出現する最初の位置(文字の6番目)を返しています。マルチバイト文字列でも正確に位置を取得できます。

offsetを利用した検索

<?php
$text = "あいうえおあいうえお";
$pos = mb_strpos($text, "い", 3);
var_dump($pos); // 結果: int(7)
?>

3文字目以降から「い」の位置を検索。最初の「い」は位置1ですが、offsetで3を指定すると後半の「い」が返ります。

エンコーディングを明示する

<?php
$text = "カタカナ";
$pos = mb_strpos($text, "タ", 0, "UTF-8");
var_dump($pos); // 結果: int(2)
?>

エンコーディングを明示的に指定して検索しています。環境によって内部エンコーディングが違う場合でも安心して使えます。

関連する関数

  • mb_strrpos – 文字列内で特定文字列が最後に現れる位置を検索する
  • mb_substr – マルチバイト文字列の一部を取得する
  • mb_strlen – マルチバイト文字列の長さを取得する
  • strpos – マルチバイト非対応の位置検索

まとめ

mb_strposはマルチバイト文字列内で特定の文字列の位置を正確に取得できる強力な関数です。日本語などの多バイト文字を扱う現場では必須とも言える関数であり、offsetやencodingのパラメータも柔軟に指定可能です。文字列操作の際には必ずmb_strposを使って文字化けや誤検出を防ぎましょう。