PHPのltrim()関数は、文字列の先頭にある空白文字や、指定した文字を取り除くための関数です。
関数名のlは「left」を意味しますが、厳密には画面上の左側ではなく、文字列データの先頭から処理します。
基本的な構文は次のとおりです。
ltrim(string $string, string $characters = " \n\r\t\v\x00"): string
第1引数の$stringには、処理対象となる文字列を指定します。
第2引数の$charactersには、文字列の先頭から削除したい文字を指定します。
第2引数を省略した場合は、半角スペースやタブ、改行などの空白文字が削除対象になります。
ltrim関数の基本的な使い方
文字列の先頭にある空白を削除する
もっとも基本的な使い方は、文字列の先頭にある空白を削除する方法です。
$text = " Hello PHP";
$result = ltrim($text);
echo $result;
実行結果は次のようになります。
Hello PHP
文字列の先頭にあった半角スペースだけが削除されています。
ltrim()は文字列の末尾を処理しないため、末尾に空白があってもそのまま残ります。
$text = " Hello PHP ";
$result = ltrim($text);
var_dump($result);
結果は次のようになります。
string(12) "Hello PHP "
文字列の先頭だけを整えたい場合に適した関数です。
ltrim関数でデフォルトで削除される文字
半角スペースだけが対象ではない
ltrim()の第2引数を省略すると、半角スペース以外の空白文字も削除対象になります。
デフォルトでは主に次の文字が対象です。
" " 半角スペース
"\t" 水平タブ
"\n" 改行(LF)
"\r" キャリッジリターン
"\v" 垂直タブ
"\x00" NULバイト
たとえば次のコードでは、改行、タブ、半角スペースがすべて文字列の先頭から削除されます。
$text = "\n\t Hello PHP";
echo ltrim($text);
実行結果は次のとおりです。
Hello PHP
単純な半角スペースだけでなく、テキストデータの先頭に含まれる改行やタブなどもまとめて除去できます。
ltrim関数で指定した文字を削除する方法
第2引数に削除対象を指定する
ltrim()の第2引数を指定すると、空白以外の文字も削除できます。
$text = "xxxHello";
$result = ltrim($text, "x");
echo $result;
実行結果は次のようになります。
Hello
文字列の先頭に連続しているxが削除されています。
一方で、文字列の途中や末尾にあるxは削除されません。
$text = "xxxHelloxxx";
echo ltrim($text, "x");
実行結果は次のようになります。
Helloxxx
ltrim()は、指定した文字が文字列の先頭から連続している間だけ削除します。
第2引数は文字列ではなく文字の集合として扱われる
「abc」という文字列単位で削除されるわけではない
ltrim()を使ううえで特に注意したいのが、第2引数の扱いです。
たとえば次のコードを見てみましょう。
$text = "abcabcHello";
echo ltrim($text, "abc");
実行結果は次のようになります。
Hello
一見すると、abcという文字列が繰り返し削除されたように見えます。
しかし実際には、第2引数の"abc"は、a、b、cという削除可能な文字の集合として扱われています。
そのため、次のような文字列でも同じように削除されます。
$text = "cabacHello";
echo ltrim($text, "abc");
結果は次のとおりです。
Hello
先頭からa、b、cのいずれかに該当する文字が続く限り削除されます。
この仕組みを理解せずに使用すると、意図していない文字まで削除してしまう可能性があります。
ltrimで特定の文字列を削除する場合の注意点
プレフィックス削除には向いていない
ltrim()は、特定の単語やプレフィックスをそのまま削除するための関数ではありません。
たとえば、URLの先頭からhttps://を削除したい場合に、次のように書くのは適切ではありません。
$url = "https://example.com";
$url = ltrim($url, "https://");
第2引数のhttps://は、ひとまとまりの文字列として扱われません。
h、t、p、s、:、/などが削除対象の文字になります。
そのため、https://の後に削除対象となる文字が続いていると、本来残したい文字まで削除される可能性があります。
特定のプレフィックスを削除する方法
PHP 8.0以降では、str_starts_with()を使用すると意図が分かりやすくなります。
$url = "https://example.com";
if (str_starts_with($url, "https://")) {
$url = substr($url, strlen("https://"));
}
echo $url;
実行結果は次のとおりです。
example.com
この方法であれば、先頭がhttps://と完全に一致する場合だけ削除できます。
特定の文字列をプレフィックスとして削除したい場合は、ltrim()ではなく、str_starts_with()やsubstr()などを組み合わせる方が安全です。
ltrim関数で文字範囲を指定する方法
「..」で削除対象の範囲を指定できる
ltrim()の第2引数では、..を使って文字の範囲を指定できます。
たとえば、文字列の先頭にある数字を削除したい場合は次のように記述できます。
$text = "12345Hello";
echo ltrim($text, "0..9");
実行結果は次のようになります。
Hello
0..9を指定することで、0から9までの数字が削除対象になります。
アルファベットの範囲も指定できます。
$text = "abcXYZ123";
echo ltrim($text, "a..z");
実行結果は次のとおりです。
XYZ123
小文字のaからzまでが削除対象となるため、先頭のabcが取り除かれています。
ltrim・rtrim・trimの違い
PHPには、ltrim()と似た関数としてrtrim()とtrim()があります。
ltrimは文字列の先頭を削除する
ltrim()は、文字列の先頭だけを処理します。
$text = " PHP ";
$result = ltrim($text);
結果は次のようになります。
PHP
末尾の空白は残ります。
rtrimは文字列の末尾を削除する
rtrim()は、文字列の末尾だけを処理します。
$text = " PHP ";
$result = rtrim($text);
結果は次のようになります。
PHP
先頭の空白は残ります。
trimは文字列の両端を削除する
trim()は、文字列の先頭と末尾の両方を処理します。
$text = " PHP ";
$result = trim($text);
実行結果は次のとおりです。
PHP
用途の違いをまとめると、次のようになります。
| 関数 | 処理する位置 |
|---|---|
ltrim() | 文字列の先頭 |
rtrim() | 文字列の末尾 |
trim() | 文字列の先頭と末尾 |
先頭だけ整形したい場合はltrim()、末尾だけならrtrim()、両端ならtrim()と使い分けるとよいでしょう。
ltrim関数の戻り値
元の変数は自動的には変更されない
ltrim()は、処理後の文字列を戻り値として返す関数です。
元の変数を直接書き換えるわけではありません。
たとえば次のコードでは、戻り値を受け取っていないため、元の文字列は変更されません。
$text = " PHP";
ltrim($text);
echo $text;
$textには、先頭の空白が残ったままです。
処理後の文字列を使用したい場合は、戻り値を変数に代入します。
$text = " PHP";
$text = ltrim($text);
echo $text;
結果は次のとおりです。
PHP
ltrim()を使用するときは、戻り値をどこで利用するのかを意識する必要があります。
ltrim関数をフォーム入力で使う方法
入力値の先頭にある空白を取り除ける
フォームから受け取った文字列の先頭に、ユーザーが誤って空白を入力することがあります。
そのような場合にltrim()を利用できます。
$name = $_POST['name'] ?? '';
$name = ltrim($name);
これにより、入力値の先頭にある半角スペースやタブなどを削除できます。
ただし、多くのフォームでは先頭だけでなく末尾の空白も不要になるため、trim()の方が適している場合があります。
$name = trim($_POST['name'] ?? '');
フォーム入力を整形する場合は、どの位置の空白を削除したいのかによって使い分けましょう。
ltrimはセキュリティ対策ではない
ltrim()やtrim()は、あくまでも文字列を整形するための関数です。
これらを使用しただけで、ユーザー入力が安全になるわけではありません。
SQLインジェクションを防ぐ場合はプリペアドステートメントを使用し、HTMLへ文字列を出力するときは、必要に応じてhtmlspecialchars()などで適切なエスケープ処理を行う必要があります。
入力値の整形とセキュリティ対策は、別の処理として考えることが重要です。
ltrim関数を使う際の注意点
全角スペースはデフォルトでは削除されない
日本語を扱うWebサイトでは、全角スペースに注意が必要です。
ltrim()がデフォルトで削除する半角スペースと、日本語で使用される全角スペースは別の文字です。
そのため、次のコードでは全角スペースは通常削除されません。
$text = " こんにちは";
echo ltrim($text);
全角スペースも削除したい場合は、Unicodeに対応した正規表現を使用する方法があります。
$text = " こんにちは";
$text = preg_replace('/^[\x{3000}\s]+/u', '', $text);
echo $text;
実行結果は次のようになります。
こんにちは
日本語フォームなどでは、半角スペースだけでなく全角スペースが入力される可能性も考慮するとよいでしょう。
マルチバイト文字の削除には注意する
ltrim()は、日本語などのマルチバイト文字を文字単位で柔軟に処理するための関数ではありません。
そのため、日本語文字を第2引数のcharacter maskとして指定して処理する用途には注意が必要です。
たとえば、日本語の「あ」を文字列の先頭から削除したい場合は、Unicode対応の正規表現を使う方が意図を明確にできます。
$text = "あああPHP";
$text = preg_replace('/^あ+/u', '', $text);
echo $text;
実行結果は次のとおりです。
PHP
日本語やUnicode文字を対象にする場合は、preg_replace()などのUnicode対応機能を検討するとよいでしょう。
複数行のインデントをすべて削除する関数ではない
ltrim()は、文字列全体の先頭から処理します。
複数行の文字列に使用しても、各行の先頭にある空白を個別に削除するわけではありません。
たとえば次のコードです。
$text = " aaa\n bbb\n ccc";
echo ltrim($text);
結果は次のようになります。
aaa
bbb
ccc
最初の行の先頭にある空白は削除されますが、2行目以降のインデントは残ります。
各行の先頭にある空白を取り除きたい場合は、正規表現など別の方法を使用する必要があります。
ltrim関数はどのような場面で使うべきか
ltrim()は、文字列の先頭だけを整形したい場合に適しています。
主な用途としては、次のようなものがあります。
- 文字列の先頭にある半角スペースや改行を削除する
- テキストデータの先頭にある不要な空白を取り除く
- 特定の1文字や文字の集合を先頭から削除する
- 文字列の先頭にある数字など一定範囲の文字を削除する
- フォーム入力値の先頭だけを整形する
一方で、先頭と末尾の両方を整えたい場合はtrim()、末尾だけを整えたい場合はrtrim()の方が適しています。
また、特定の単語やURLのプレフィックスを削除したい場合には、ltrim()ではなく文字列比較やstr_starts_with()などを使用した方が安全です。
PHPのltrim関数を正しく使い分けよう
PHPのltrim()関数は、文字列の先頭にある空白文字や指定した文字を取り除くための関数です。
基本的には次のように使用します。
$result = ltrim($string);
第2引数を指定すると、特定の文字や文字範囲を削除することもできます。
$result = ltrim($string, "0..9");
ただし、第2引数は「削除したい文字列」ではなく、削除対象となる文字の集合として扱われます。
そのため、https://や特定の単語などをプレフィックスとして削除する用途には向いていません。
また、日本語環境では全角スペースがデフォルトの削除対象にならないことや、マルチバイト文字の処理には注意が必要です。
ltrim()、rtrim()、trim()の違いを理解し、削除したい位置や文字の種類に応じて適切な関数を使い分けることが大切です。
以上、PHPのltrim関数の使い方や注意点についてでした。
最後までお読みいただき、ありがとうございました。










