PHPで文字列を切り出す方法を簡単に解説

PHPで文字列を切り出す方法を簡単に解説

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座


PHPのsubstr関数で半角の文字列を抽出する方法

PHP文字列の一部を取り出したい場合、substr関数を使用できます。substr関数は半角英数字などのシングルバイト文字を扱う際に便利で、開始位置と文字数を指定することによって必要な部分だけを抽出できます。

substr関数には、以下3つの使い方があります。それぞれ開始位置の指定方法が異なるため、用途に応じて使い分けることによって、効率的に文字列を抽出できます。

  • 先頭を基準にして抽出する
  • 末尾を基準にして抽出する
  • 末尾を除外して抽出する

各方法について詳しく解説していきます。

先頭を基準にして抽出する

substr関数の基本構文は、substr(対象文字列, 開始位置, 文字数)です。開始位置は0から始まり、文字数を省略すると開始位置から最後まで抽出されます。

<?php
$str = "Hello World";
echo substr($str, 0, 5);
echo "\n";
echo substr($str, 6);
?>

上記のコードでは、最初のsubstrは開始位置0(先頭)から5文字分を抽出しているため「Hello」が出力されます。2つ目のsubstrは開始位置6から最後まで抽出しているため「World」が出力されます。

末尾を基準にして抽出する

開始位置に負の数を指定すると、文字列の末尾から数えた位置を基準に抽出できます。負の数を使うことによって、文字列の長さを事前に調べる必要がなくなります。

<?php
$str = "Hello World";
echo substr($str, -5);
echo "\n";
echo substr($str, -5, 3);
?>

最初のsubstrは、末尾から5文字目を開始位置としているため「World」が出力されます。2つ目のsubstrは末尾から5文字目を開始位置とし、そこから3文字分を抽出しているため「Wor」が出力されます。

【PR】プログラミングや生成AIを無料で学べる「コードキャンプフリー」

末尾を除外して抽出する

文字数に負の数を指定すると、文字列の末尾から指定した文字数を除外して抽出できます。この方法は、末尾の不要な部分を取り除きたい場合に便利です。

<?php
$str = "Hello World";
echo substr($str, 0, -6);
echo "\n";
echo substr($str, 6, -1);
?>

最初のsubstrは、開始位置0から始めて末尾6文字を除外しているため「Hello」が出力されます。2つ目のsubstrは、開始位置6から始めて末尾1文字を除外しているため「Worl」が出力されます。

PHPのmb_substr関数で日本語の文字列を抽出する方法

日本語などのマルチバイト文字を扱う場合、mb_substr関数を使用する必要があります。マルチバイト文字とは、1文字の表現に複数のバイトを使用する文字のことで、日本語のひらがなやカタカナ、漢字などが該当します。

mb_substr関数には、以下3つの使い方があります。それぞれ文字数の指定方法が異なり、日本語文字を正確に抽出できます。

  • 開始位置と文字数を指定して抽出する
  • 負の文字数で末尾を除外する
  • 文字数制限で省略表示を実装する

各方法について、詳しく解説していきます。

開始位置と文字数を指定して抽出する

mb_substr関数の基本構文は、mb_substr(対象文字列, 開始位置, 文字数, エンコーディング)です。エンコーディングにはUTF-8を指定することが一般的で、日本語文字を文字単位で正確に抽出できます。

<?php
$str = "こんにちは世界";
echo mb_substr($str, 0, 5, "UTF-8");
echo "\n";
echo mb_substr($str, 5, 2, "UTF-8");
?>

最初のmb_substrは、開始位置0から5文字を抽出しているため「こんにちは」が出力されます。2つ目のmb_substrは、開始位置5から2文字を抽出しているため「世界」が出力されます。

負の文字数で末尾を除外する

文字数に負の数を指定すると、文字列の末尾から指定した文字数を除外して抽出できます。この機能はsubstr関数と同じですが、日本語文字でも正確に動作します。

<?php
$str = "こんにちは世界";
echo mb_substr($str, 0, -2, "UTF-8");
echo "\n";
echo mb_substr($str, 2, -1, "UTF-8");
?>

最初のmb_substrは、開始位置0から始めて末尾2文字を除外しているため、「こんにちは」が出力されます。2つ目のmb_substrは、開始位置2から始めて末尾1文字を除外しているため、「にちは」が出力されます。

【PR】『Python』を学べる企業・個人向けのプログラミングコース

文字数制限で省略表示を実装する

mb_substr関数を使用すると、指定した文字数を超える文字列を切り詰めて表示できます。この方法は、記事の要約や一覧表示で長い文章を省略する際に役立ちます。

<?php
$str = "これは非常に長い文章です。必要に応じて切り詰めます。";
$maxLength = 15;

if (mb_strlen($str, "UTF-8") > $maxLength) {
    echo mb_substr($str, 0, $maxLength, "UTF-8") . "...";
} else {
    echo $str;
}
?>

上記のコードでは、文字列が15文字を超える場合は15文字目まで抽出して末尾に「...」を追加しています。これにより「これは非常に長い文章です。必...」と表示され、長い文章を適切な長さに調整できます。

substrとmb_substrの違いと使い分け

substr関数とmb_substr関数はどちらも文字列を抽出できますが、処理の仕組みが異なります。適切な関数を選択しないと文字化けが発生するため、それぞれの特性を理解することが重要です。

2つの関数には、以下3つの違いがあります。それぞれに特徴があり、扱う文字の種類によって使い分ける必要があります。

  • substrはバイト単位で処理する
  • mb_substrは文字単位で処理する
  • マルチバイト文字を扱う際の注意点

各違いについて詳しく解説していきます。

substrはバイト単位で処理する

substr関数は文字列をバイト単位で処理するため、半角英数字や記号などの1バイト文字を扱う際に適しています。バイト単位の処理は高速ですが、マルチバイト文字には対応していません。

<?php
$str1 = "Hello";
echo substr($str1, 0, 3);
echo "\n";

$str2 = "こんにちは";
echo substr($str2, 0, 3);
?>

最初のsubstrは、半角英数字を扱っているため「Hel」と正しく出力されます。しかし、2つ目のsubstrは日本語を扱っているため、3バイト分を抽出することになり、「こ」の1文字だけが出力されるか文字化けが発生します。

mb_substrは文字単位で処理する

mb_substr関数は文字列を文字単位で処理するため、日本語などのマルチバイト文字を正確に扱えます。UTF-8エンコーディングでは日本語1文字が3バイトですが、mb_substr関数は1文字として認識します。

<?php
$str1 = "Hello";
echo mb_substr($str1, 0, 3, "UTF-8");
echo "\n";

$str2 = "こんにちは";
echo mb_substr($str2, 0, 3, "UTF-8");
?>

最初のmb_substrは半角英数字を扱っていますが、文字単位で処理されるため「Hel」と正しく出力されます。2つ目のmb_substrは、日本語を文字単位で処理しているため、「こんに」と正しく3文字を抽出できます。

マルチバイト文字を扱う際の注意点

マルチバイト文字を扱う際は、必ずmb_substr関数を使用してエンコーディングを正しく指定する必要があります。substr関数でマルチバイト文字を処理すると、文字の途中でバイトが切断されて文字化けが発生します。

<?php
$str = "日本語とEnglish混在";

// substr関数を使用した場合(非推奨)
echo substr($str, 0, 9);
echo "\n";

// mb_substr関数を使用した場合(推奨)
echo mb_substr($str, 0, 9, "UTF-8");
?>

substr関数では、日本語部分で文字化けが発生する可能性がありますが、mb_substr関数を使用すれば「日本語とEng」と正しく9文字を抽出できます。日本語を含む文字列を扱う場合は、常にmb_substr関数とUTF-8エンコーディングの指定を組み合わせて使用しましょう。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する