【PHP8.x】mb_trim関数の使い方
mb_trim関数は、マルチバイト文字を含む文字列の先頭および末尾から、指定した文字を取り除く処理を実行する関数です。PHPに元から存在するtrim関数は、半角英数字(ASCII文字)を対象とする場合には適切に機能しますが、日本語や中国語のようなマルチバイト文字を含む文字列に対しては、文字の境界を正しく認識できないため、意図しない結果を招くことがあります。
このmb_trim関数は、そのようなマルチバイト文字の特性を考慮して設計されており、UTF-8などのエンコーディングで記述された文字列を正確に扱えます。これにより、文字列の先頭や末尾に存在する不要な空白文字(半角スペース、全角スペース、タブ、改行など)や、開発者が任意に指定した特定の文字セットを確実に除去し、文字列をきれいに整形することが可能になります。
主な引数として、処理の対象となる文字列を渡します。また、オプションで除去したい文字のセットを文字列として指定することもできます。この文字セットを指定しない場合、関数はデフォルトで一般的な空白文字を取り除きます。さらに、文字列のエンコーディングを指定するオプションも用意されており、より詳細な制御が可能です。ウェブアプリケーションにおけるユーザー入力の整形や、外部システムから取得したデータのクリーニングなど、特にマルチバイト文字を扱う場面で、文字列処理の堅牢性と正確性を向上させるために非常に有用な関数です。
基本的な使い方
構文(syntax)
<?php
// マルチバイト文字列の先頭と末尾から空白文字を除去します (デフォルトの挙動)
$original_string = " こんにちは、世界! ";
$trimmed_string_default = mb_trim($original_string); // 結果: "こんにちは、世界!"
// マルチバイト文字列の先頭と末尾から特定の文字を除去します
$another_string = "---PHPプログラミング---";
$trimmed_string_custom = mb_trim($another_string, "-"); // 結果: "PHPプログラミング"
?>
引数(parameters)
string $string, string $characters = " \n\r\t\v\0", ?string $encoding = null
- string $string: トリミング(空白文字の除去)対象の文字列
- string $characters = " \n\r\t\v\0": トリミングする対象となる空白文字を指定する文字列。デフォルトでは、スペース、改行、キャリッジリターン、タブ、垂直タブ、NULL文字が指定されています。
- ?string $encoding = null: 文字エンコーディングを指定する文字列。nullを指定した場合、内部エンコーディングが使用されます。
戻り値(return)
string
指定された文字列から、指定された文字を文字列の先頭と末尾で除去した新しい文字列を返します。
サンプルコード
PHP mb_trim() と trim() の違いを理解する
<?php
/**
* trim() と mb_trim() の違いを示すサンプルコードです。
* マルチバイト文字を含む文字列の空白除去において、それぞれの関数の挙動を比較し、
* システムエンジニアを目指す初心者にも理解できるように説明します。
*/
function demonstrate_trim_vs_mb_trim(): void
{
// 全角スペースと半角スペース、タブ、改行を含むマルチバイト文字列を定義します。
// 全角スペースは通常の trim() では除去できません。
$original_string = " Hello PHP world! \t\n";
echo "--- 元の文字列 ---" . PHP_EOL;
// 出力時に不可視文字を視覚化するために置換しています。
echo " [" . str_replace(["\n", "\t", " "], ['\\n', '\\t', '\s'], $original_string) . "]" . PHP_EOL;
echo " (長さ: " . mb_strlen($original_string) . " 文字)" . PHP_EOL . PHP_EOL;
// 1. trim() 関数の使用
// trim() はデフォルトで半角スペース、タブ、改行、NULLバイトなどを除去しますが、
// マルチバイトの空白文字(例: 全角スペース)は除去しません。
$trimmed_string = trim($original_string);
echo "--- trim() を使用した場合 ---" . PHP_EOL;
echo " [デフォルトのtrim対象文字: \" \\n\\r\\t\\v\\0\" (半角文字のみ)]" . PHP_EOL;
echo " [" . str_replace(["\n", "\t", " "], ['\\n', '\\t', '\s'], $trimmed_string) . "]" . PHP_EOL;
echo " (長さ: " . mb_strlen($trimmed_string) . " 文字)" . PHP_EOL;
echo " (結果: 先頭と末尾の半角スペース、タブ、改行は除去されますが、全角スペースは残ります。)" . PHP_EOL . PHP_EOL;
// 2. mb_trim() 関数の使用
// mb_trim() はマルチバイト文字を考慮したトリムが可能です。
// 第2引数 $characters で除去したい文字を明示的に指定する必要があります。
// ここでは半角の空白文字に加え、全角スペース「 」も指定します。
// mb_trim は PHP 8.2 から利用可能です。
$mb_trimmed_string = mb_trim($original_string, " \n\r\t\v\0 ");
echo "--- mb_trim() を使用した場合 ---" . PHP_EOL;
echo " [mb_trim対象文字: \" \\n\\r\\t\\v\\0 \" (半角文字と全角スペース)]" . PHP_EOL;
echo " [" . str_replace(["\n", "\t", " "], ['\\n', '\\t', '\s'], $mb_trimmed_string) . "]" . PHP_EOL;
echo " (長さ: " . mb_strlen($mb_trimmed_string) . " 文字)" . PHP_EOL;
echo " (結果: 先頭と末尾の全角スペース、半角スペース、タブ、改行がすべて除去されます。)" . PHP_EOL . PHP_EOL;
}
// 関数を実行し、結果を表示します。
demonstrate_trim_vs_mb_trim();
PHP 8.4で利用できるmb_trim
関数は、文字列の先頭と末尾から指定された文字を取り除く機能を提供します。この関数は、特に日本語の全角スペースのようなマルチバイト文字を含む文字列を扱う際に非常に役立ちます。
mb_trim
の第一引数$string
には処理対象の文字列を指定し、第二引数$characters
には除去したい文字を文字列として指定します。デフォルトでは半角スペース、タブ、改行などが指定されていますが、全角スペースなどをここに含めることで、それらも除去対象とできます。第三引数$encoding
は文字エンコーディングを指定しますが、通常は省略可能です。この関数は、指定された文字が除去された新しい文字列を返します。
標準のtrim
関数も同様に文字列の空白を除去しますが、こちらはデフォルトで半角スペースやタブ、改行といったシングルバイト文字のみを対象とします。そのため、全角スペースなどのマルチバイトの空白文字はtrim
では除去されず、文字列中に残ってしまうという違いがあります。
このサンプルコードでは、全角スペースや半角スペース、タブ、改行を含む文字列をtrim
とmb_trim
で処理した結果を比較しています。trim
では全角スペースがそのまま残るのに対し、mb_trim
では第二引数に全角スペースを明示的に指定することで、半角・全角問わず指定されたすべての空白文字を正確に除去できることを示しています。これにより、マルチバイト文字を含む文字列を適切に処理する際のmb_trim
の重要性が理解できます。
PHPのtrim()
関数は、半角スペースやタブ、改行といった半角文字の除去に用いますが、全角スペースなどのマルチバイト文字はデフォルトでは除去できません。マルチバイト文字を含む文字列の空白を除去したい場合は、PHP 8.2以降で利用可能なmb_trim()
関数を使用します。mb_trim()
を利用する際は、第2引数に除去したい半角・全角の文字をすべて明示的に指定する必要があります。これを怠ると、意図した文字が除去されない可能性がありますので注意してください。また、文字エンコーディングについても適切に指定することで、予期せぬ動作を防ぎ、より安全に利用できます。