13,136
回編集
| 216行目: | 216行目: | ||
$longText = "これは非常に長い文章である。途中で切られて...という形で表示される。"; | $longText = "これは非常に長い文章である。途中で切られて...という形で表示される。"; | ||
echo createExcerpt($longText, 10); // "これは非常に長..." が表示される | echo createExcerpt($longText, 10); // "これは非常に長..." が表示される | ||
</syntaxhighlight> | |||
<br><br> | |||
== 文字列の検索 == | |||
mb_strpos関数は、マルチバイト文字列の中から特定の文字列が最初に現れる位置を検索する関数である。<br> | |||
日本語等のマルチバイト文字を含む文字列で特に重要である。<br> | |||
<br> | |||
# 戻り値 | |||
文字列が見つかった場合 : 最初に現れる位置 (0から始まる) | |||
見つからない場合 : false | |||
<br> | |||
# 引数 | |||
第1引数 : 検索対象の文字列 | |||
第2引数 : 検索する文字列 | |||
第3引数 : 検索開始位置 (オプション) | |||
第4引数 : 文字エンコーディング (オプション) | |||
<br> | |||
使用するシーンを以下に示す。<br> | |||
* 文字列の存在の確認 | |||
* 特定の文字列間のテキスト抽出 | |||
* タグやマーカーの位置検出 | |||
* 文字列の分割処理 | |||
<br> | |||
<u>※注意</u><br> | |||
* 戻り値のチェックには必ず<code>===</code>を使用する。(0とfalseを区別するため) | |||
* 必要に応じて適切な文字エンコーディングを指定する。 | |||
* 大文字・小文字を区別するため、必要に応じてカスタム関数を作成する。 | |||
<br> | |||
==== 基本的な使用例 ==== | |||
<syntaxhighlight lang="php"> | |||
$text = "こんにちは世界"; | |||
$position = mb_strpos($text, "世界"); // 5が返される | |||
echo "Position: " . $position . "\n"; | |||
</syntaxhighlight> | |||
<br> | |||
==== 検索開始位置の指定 ==== | |||
<syntaxhighlight lang="php"> | |||
$text = "PHPはとても楽しい。PHPで開発しましょう。"; | |||
$position = mb_strpos($text, "PHP", 5); // 12が返される (2番目のPHPの位置) | |||
echo "Second PHP position: " . $position . "\n"; | |||
</syntaxhighlight> | |||
<br> | |||
==== 文字が見つからない場合の処理 ==== | |||
<syntaxhighlight lang="php"> | |||
$text = "こんにちは世界"; | |||
$position = mb_strpos($text, "さようなら"); | |||
if ($position === false) { | |||
echo "文字列が見つかりませんでした。\n"; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== 文字エンコーディングの指定 ==== | |||
<syntaxhighlight lang="php"> | |||
$text = "안녕하세요"; // 韓国語 | |||
$position = mb_strpos($text, "하", 0, 'UTF-8'); | |||
echo "Korean character position: " . $position . "\n"; | |||
</syntaxhighlight> | |||
<br> | |||
==== 実践的な使用例 : 文字列の存在の確認と部分取得 ==== | |||
<syntaxhighlight lang="php"> | |||
function extractText($text, $start_marker, $end_marker) | |||
{ | |||
$start_pos = mb_strpos($text, $start_marker); | |||
if ($start_pos === false) { | |||
return null; | |||
} | |||
$start_pos += mb_strlen($start_marker); | |||
$end_pos = mb_strpos($text, $end_marker, $start_pos); | |||
if ($end_pos === false) { | |||
return null; | |||
} | |||
return mb_substr($text, $start_pos, $end_pos - $start_pos); | |||
} | |||
$text = "【タイトル】PHPプログラミング【終了】"; | |||
$content = extractText($text, "【タイトル】", "【終了】"); | |||
echo "Extracted content: " . $content . "\n"; // "PHPプログラミング" が出力される | |||
</syntaxhighlight> | |||
<br> | |||
==== 大文字・小文字を区別しない検索の実装例 ==== | |||
<syntaxhighlight lang="php"> | |||
function mb_stripos_custom($haystack, $needle) | |||
{ | |||
return mb_strpos( | |||
mb_strtolower($haystack), | |||
mb_strtolower($needle) | |||
); | |||
} | |||
$text = "PHPとphpは同じ意味です。"; | |||
$position = mb_stripos_custom($text, "php"); | |||
echo "Case-insensitive position: " . $position . "\n"; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||