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やプログラミングに関するコラム
【AWS】認定資格12種類の一覧や難易度、費用などを解説
Canvaとは?使い方やアカウント登録などを初心者向けに解説
git configで設定情報を確認・表示する方法
「Pythonはやめとけ」と言われる理由と学習するメリット
Ubuntuのversionを確認する方法
Geminiで画像を生成する方法|ChatGPTとの比較結果も紹介
CodexがChatGPT Plusユーザー向けに解禁されたので使ってみた!できることや料金プランも併せて紹介
【Python】仮想環境から抜ける方法
【Python】文字列から改行コードを除去する方法
【Python】10回の繰り返し処理を実装する方法
ITやプログラミングに関するニュース
双日テックイノベーションらがウェビナー開催、業務を止めないゼロトラスト運用を解説
株式会社スーツがウェビナー開催、広告会社のプロジェクト管理術と生産性向上を解説
東京システムハウスとエクサが共同ウェビナー開催、富士通メインフレームのモダナイゼーションを解説
駿台小中学部がドローンプログラミングセミナーを開催、中学生に最先端のICT教育を提供
マーケティングアソシエーションが越境ECウェビナー開催、海外販売の始め方を解説
株式会社uyetがVTuber事業向けウェビナー開催、資金調達の戦略を徹底解説
ライスカレープラスとサイトエンジンが共催ウェビナー開催、SNSとWeb活用で観光集客戦略を解説
MODE Inc.が土木DXセミナーを開催、持続可能なインフラ整備の未来を議論
NPO法人SKYが人的資本経営支援ウェビナーを開催、孤独・孤立対策による企業価値向上を解説
ベンチャー広報とサンワード証券が共催セミナー開催、経営者のためのメディア活用術を解説




