PHPで空白を削除する方法は、どの空白を、どこから削除したいかによって使う関数が変わります。
たとえば、次のようなケースがあります。
- 文字列の前後にある空白だけを削除したい
- 文字列の左側だけ、または右側だけ空白を削除したい
- 文字列中の半角スペースをすべて削除したい
- 改行やタブも含めて削除したい
- 全角スペースも削除したい
- 複数の空白を1つにまとめたい
- フォーム入力やCSVデータの空白を整えたい
PHPでは、主に以下の関数を使います。
trim()
ltrim()
rtrim()
str_replace()
preg_replace()
それぞれの違いを理解して使い分けることが大切です。
前後の空白を削除する場合
trim()を使う
文字列の先頭と末尾にある空白を削除したい場合は、trim() を使います。
$str = " Hello World ";
$result = trim($str);
echo $result;
出力結果は次のようになります。
Hello World
trim() は、文字列の前後にある空白を削除します。
ただし、文字列の途中にある空白は削除されません。
$str = " Hello World ";
$result = trim($str);
echo $result;
出力結果は次のようになります。
Hello World
Hello と World の間にあるスペースは残ります。
そのため、trim() は「文字列全体の空白を削除する関数」ではなく、文字列の前後を整える関数と考えるとわかりやすいです。
trim()で削除される文字
trim() は、デフォルトでは主に次の文字を削除します。
| 文字 | 意味 |
|---|---|
" " | 半角スペース |
"\t" | タブ |
"\n" | 改行 |
"\r" | キャリッジリターン |
"\0" | NULLバイト |
"\v" | 垂直タブ |
たとえば、改行やタブが前後に含まれていても削除できます。
$str = "\n\t Hello World \n";
$result = trim($str);
echo $result;
出力結果は次のようになります。
Hello World
左側・右側の空白だけを削除する場合
ltrim()で左側の空白を削除する
文字列の左側、つまり先頭側の空白だけを削除したい場合は、ltrim() を使います。
$str = " Hello World ";
$result = ltrim($str);
echo $result;
出力結果は次のようになります。
Hello World
右側の空白は残ります。
rtrim()で右側の空白を削除する
文字列の右側、つまり末尾側の空白だけを削除したい場合は、rtrim() を使います。
$str = " Hello World ";
$result = rtrim($str);
echo $result;
出力結果は次のようになります。
Hello World
左側の空白は残ります。
文字列中の半角スペースを削除する場合
str_replace()を使う
文字列の前後だけではなく、文字列中の半角スペースも削除したい場合は、str_replace() を使います。
$str = "Hello World PHP";
$result = str_replace(' ', '', $str);
echo $result;
出力結果は次のようになります。
HelloWorldPHP
このコードは、半角スペースを空文字に置換しています。
str_replace(' ', '', $str);
つまり、文字列の中にある半角スペースをすべて削除できます。
str_replace()ではタブや改行は削除されない
str_replace(' ', '', $str) で削除できるのは、あくまで半角スペースです。
タブや改行は削除されません。
$str = "Hello\tWorld\nPHP";
$result = str_replace(' ', '', $str);
echo $result;
この場合、タブや改行は残ります。
半角スペースだけを対象にしたい場合は str_replace() で十分ですが、タブや改行も含めて処理したい場合は、正規表現を使う方が便利です。
タブや改行などの空白文字を削除する場合
preg_replace()を使う
半角スペースだけでなく、タブや改行などの一般的な空白文字も削除したい場合は、preg_replace() を使います。
$str = "Hello World\nPHP\tLaravel";
$result = preg_replace('/\s+/', '', $str);
echo $result;
出力結果は次のようになります。
HelloWorldPHPLaravel
正規表現の \s は、半角スペース、タブ、改行などの空白文字を表します。
preg_replace('/\s+/', '', $str);
このコードは、連続する空白文字を空文字に置換しています。
「すべての空白」と言い切る場合は注意する
preg_replace('/\s+/', '', $str) は、半角スペース、タブ、改行などを削除する場合に便利です。
ただし、日本語の全角スペースや、コピー&ペーストで混ざる特殊なUnicode空白まで含めて完全に削除したい場合は、この書き方だけでは不十分なことがあります。
そのため、厳密には次のように考えるとよいです。
preg_replace('/\s+/', '', $str);
これは、一般的な空白文字を削除する方法です。
全角スペースも含めたい場合は、次のように書きます。
preg_replace('/[\s ]+/u', '', $str);
全角スペースを削除する場合
trim()では全角スペースは削除されない
日本語の文字列では、全角スペース が含まれることがあります。
注意したいのは、trim() はデフォルトでは全角スペースを削除しないという点です。
$str = " こんにちは ";
$result = trim($str);
echo $result;
この場合、前後の全角スペースは残ります。
全角スペースも削除したい場合は、str_replace() や preg_replace() を使います。
str_replace()で全角スペースを削除する
全角スペースだけを削除したい場合は、次のように書けます。
$str = " こんにちは 世界 ";
$result = str_replace(' ', '', $str);
echo $result;
出力結果は次のようになります。
こんにちは世界
半角スペースと全角スペースの両方を削除したい場合は、配列で指定できます。
$str = " こんにちは 世界 ";
$result = str_replace([' ', ' '], '', $str);
echo $result;
出力結果は次のようになります。
こんにちは世界
電話番号、郵便番号、商品コードなど、途中の空白が不要なデータではこの方法が使いやすいです。
$tel = "090 1234 5678";
$result = str_replace([' ', ' '], '', $tel);
echo $result;
出力結果は次のようになります。
09012345678
半角スペース・全角スペース・改行・タブをまとめて削除する場合
preg_replace(‘/[\s ]+/u’, ”, $str)を使う
半角スペース、全角スペース、タブ、改行をまとめて削除したい場合は、次のように書きます。
$str = " こんにちは World \n PHP\t ";
$result = preg_replace('/[\s ]+/u', '', $str);
echo $result;
出力結果は次のようになります。
こんにちはWorldPHP
この正規表現の意味は次の通りです。
/[\s ]+/u
| 部分 | 意味 |
|---|---|
[...] | 文字クラス。この中のいずれかに一致 |
\s | 半角スペース、タブ、改行などの空白文字 |
| 全角スペース |
+ | 1回以上の連続 |
u | UTF-8として扱う |
日本語を含む文字列を正規表現で処理する場合は、u 修飾子を付けると安全です。
日本語サイトやフォーム入力では、次の書き方が実用的です。
$value = preg_replace('/[\s ]+/u', '', $value);
前後の全角スペースも削除する場合
preg_replace()で前後の空白だけを削除する
trim() では全角スペースを削除できないため、前後の全角スペースも含めて削除したい場合は、正規表現を使います。
$str = " こんにちは ";
$result = preg_replace('/^[\s ]+|[\s ]+$/u', '', $str);
echo $result;
出力結果は次のようになります。
こんにちは
この正規表現は、文字列の先頭または末尾にある半角・全角の空白を削除します。
/^[\s ]+|[\s ]+$/u
| 部分 | 意味 |
|---|---|
^ | 文字列の先頭 |
[\s ]+ | 半角・全角の空白が1個以上 |
| ` | ` |
$ | 文字列の末尾 |
u | UTF-8として扱う |
文字列の途中の空白は残したいが、前後の全角スペースも削除したい場合に使えます。
Unicodeの空白文字まで意識する場合
\p{Zs}を使う方法
Webページからコピーした文字列や、外部システムから取り込んだデータには、通常の半角スペースや全角スペース以外の空白が混ざることがあります。
たとえば、次のような空白です。
- ノーブレークスペース
- 細いスペース
- Unicodeのスペース区切り文字
このような空白まで意識する場合は、次のような正規表現も検討できます。
$value = preg_replace('/[\s\p{Zs}]+/u', '', $value);
\p{Zs} は、Unicodeのスペース区切り文字を対象にする書き方です。
通常のフォーム入力であれば、次の書き方で十分なことが多いです。
$value = preg_replace('/[\s ]+/u', '', $value);
ただし、外部データやコピー&ペーストされた文字列を扱う場合は、\p{Zs} を使った書き方も選択肢になります。
複数の空白を1つにまとめる場合
preg_replace()で空白を整える
空白を完全に削除するのではなく、複数の空白を1つにまとめたい場合もあります。
たとえば、検索キーワードや文章の整形では、空白をすべて消すよりも、1つの半角スペースにまとめる方が自然です。
$str = "Hello World PHP";
$result = preg_replace('/\s+/', ' ', $str);
echo $result;
出力結果は次のようになります。
Hello World PHP
前後に空白が残る可能性があるため、通常は trim() と組み合わせます。
$str = " Hello World PHP ";
$result = trim(preg_replace('/\s+/', ' ', $str));
echo $result;
出力結果は次のようになります。
Hello World PHP
全角スペースも含めて空白を1つにまとめる
日本語入力では、全角スペースが混ざることがあります。
全角スペースも含めて複数の空白を1つにまとめたい場合は、次のように書きます。
$str = " PHP 空白 削除 ";
$result = trim(preg_replace('/[\s ]+/u', ' ', $str));
echo $result;
出力結果は次のようになります。
PHP 空白 削除
検索フォームのキーワード整形では、このような処理がよく使われます。
$keyword = trim(preg_replace('/[\s ]+/u', ' ', $_GET['q'] ?? ''));
この処理により、半角スペース、全角スペース、改行、タブなどをまとめて1つの半角スペースにできます。
配列内の文字列をまとめてtrimする場合
array_map()を使う
フォームやCSVなどで複数の文字列を配列として扱う場合、配列内の値をまとめて trim() したいことがあります。
$data = [
'name' => ' 山田太郎 ',
'email' => ' test@example.com ',
'message' => "\nこんにちは\n",
];
$result = array_map('trim', $data);
print_r($result);
出力結果は次のようになります。
Array
(
[name] => 山田太郎
[email] => test@example.com
[message] => こんにちは
)
ただし、array_map('trim', $data) は、配列の値がすべて文字列である場合に向いています。
配列やnullが混ざる場合は型チェックする
配列の中にさらに配列が含まれていたり、null や数値が混ざっていたりする場合は注意が必要です。
安全に処理するなら、次のように型チェックを入れるとよいです。
$result = array_map(function ($value) {
return is_string($value) ? trim($value) : $value;
}, $data);
この書き方であれば、文字列だけに trim() を適用できます。
フォーム入力で空白を削除する場合
基本的なフォーム入力の処理
フォームから送信された名前やメールアドレスの前後の空白を削除する場合は、次のように書けます。
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');
$_POST['name'] ?? '' と書くことで、値が存在しない場合でもエラーを避けられます。
これは、次のような意味です。
$_POST['name'] が存在すればその値を使う。
存在しなければ空文字を使う。
その結果に trim() をかける。
フォーム入力では、前後に余計な空白が入ることがあるため、trim() はよく使われます。
配列で送信される可能性がある場合は注意する
通常のテキスト入力であれば、次の書き方で問題ないことが多いです。
$name = trim($_POST['name'] ?? '');
ただし、フォームの設計によっては、値が配列として送信されることがあります。
たとえば、次のような入力名の場合です。
<input name="name[]">
この場合、$_POST['name'] は配列になる可能性があります。
安全性を高めるなら、次のように型チェックを入れます。
$name = $_POST['name'] ?? '';
$name = is_string($name) ? trim($name) : '';
通常のフォームではシンプルな書き方で十分ですが、汎用的な処理を書く場合は型にも注意しましょう。
HTMLに出力する場合の注意点
trim()とhtmlspecialchars()は役割が違う
フォーム入力を画面に表示する場合、空白削除だけでは不十分です。
$name = trim($_POST['name'] ?? '');
$name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
echo $name;
trim() は、前後の空白を整えるための処理です。
一方、htmlspecialchars() は、HTMLとして出力するときに特殊文字をエスケープするための処理です。
つまり、役割が違います。
| 処理 | 目的 |
|---|---|
trim() | 空白を整える |
htmlspecialchars() | HTML出力時の安全性を高める |
フォーム入力をHTMLに表示する場合は、空白の整形だけでなく、出力時のエスケープも忘れないようにしましょう。
目的別の使い分け
前後の空白だけ削除したい場合
$value = trim($value);
名前、メールアドレス、問い合わせ内容など、前後の余計な空白を削除したい場合に使います。
左側だけ削除したい場合
$value = ltrim($value);
文字列の先頭にある空白だけを削除したい場合に使います。
右側だけ削除したい場合
$value = rtrim($value);
文字列の末尾にある空白だけを削除したい場合に使います。
半角スペースだけ削除したい場合
$value = str_replace(' ', '', $value);
文字列中の半角スペースだけを削除したい場合に使います。
半角スペースと全角スペースを削除したい場合
$value = str_replace([' ', ' '], '', $value);
電話番号、郵便番号、商品コードなど、途中の空白が不要な値に向いています。
半角スペース・タブ・改行などを削除したい場合
$value = preg_replace('/\s+/', '', $value);
一般的な空白文字をまとめて削除したい場合に使います。
全角スペースも含めて削除したい場合
$value = preg_replace('/[\s ]+/u', '', $value);
日本語サイトや日本語フォームでは、特に実用的な書き方です。
Unicodeの空白も考慮したい場合
$value = preg_replace('/[\s\p{Zs}]+/u', '', $value);
外部データやコピー&ペーストされた文字列を扱う場合に検討できます。
複数の空白を1つにまとめたい場合
$value = trim(preg_replace('/\s+/', ' ', $value));
英数字中心のテキスト整形に使いやすい書き方です。
全角スペースも含めて空白を1つにまとめたい場合
$value = trim(preg_replace('/[\s ]+/u', ' ', $value));
検索キーワードや日本語を含む文章の整形に向いています。
実務でよく使う例
名前やメールアドレスの前後の空白を削除する
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');
名前やメールアドレスでは、通常は途中の空白まで削除する必要はありません。
そのため、前後だけを整える trim() が適しています。
電話番号の空白を削除する
$tel = str_replace([' ', ' '], '', $_POST['tel'] ?? '');
電話番号では、途中に半角スペースや全角スペースが入ることがあります。
090 1234 5678
090 1234 5678
このような入力を、次のように整えられます。
09012345678
検索キーワードの空白を整える
$keyword = trim(preg_replace('/[\s ]+/u', ' ', $_GET['q'] ?? ''));
検索キーワードでは、空白を完全に削除するより、複数の空白を1つにまとめる方が自然です。
たとえば、次のような入力があったとします。
PHP 空白 削除
処理後は次のようになります。
PHP 空白 削除
CSVデータの前後の空白を削除する
$row = [
' apple ',
' banana ',
' orange',
];
$cleaned = array_map('trim', $row);
print_r($cleaned);
出力結果は次のようになります。
Array
(
[0] => apple
[1] => banana
[2] => orange
)
CSVや外部データを取り込むと、値の前後に空白が含まれることがあります。
そのような場合は、trim() を使って整えると扱いやすくなります。
PHPで空白削除を行うときの注意点
trim()は文字列の途中の空白を削除しない
trim() は前後の空白を削除する関数です。
文字列の途中の空白は削除されません。
$str = " Hello World ";
echo trim($str);
出力結果は次のようになります。
Hello World
途中の空白も削除したい場合は、str_replace() や preg_replace() を使いましょう。
全角スペースは別に考える
日本語の入力では、全角スペースが含まれることがあります。
trim() では、デフォルトで全角スペースは削除されません。
全角スペースも含めて処理したい場合は、次のような書き方を使います。
$value = str_replace([' ', ' '], '', $value);
または、
$value = preg_replace('/[\s ]+/u', '', $value);
です。
固定文字の削除ならstr_replace()がわかりやすい
半角スペースや全角スペースなど、削除したい文字が明確な場合は str_replace() がシンプルです。
$value = str_replace([' ', ' '], '', $value);
正規表現を使わなくてよいため、読みやすく、意図も伝わりやすいです。
パターンでまとめて処理するならpreg_replace()が便利
改行、タブ、連続する空白、全角スペースなどをまとめて処理したい場合は、preg_replace() が便利です。
$value = preg_replace('/[\s ]+/u', '', $value);
複数の空白を1つにまとめる場合も、preg_replace() が向いています。
$value = trim(preg_replace('/[\s ]+/u', ' ', $value));
まとめ
PHPの空白削除は目的に応じて使い分ける
PHPで空白を削除する場合は、目的に応じて関数を使い分けることが重要です。
| やりたいこと | 書き方 |
|---|---|
| 前後の空白を削除する | trim($value) |
| 左側の空白を削除する | ltrim($value) |
| 右側の空白を削除する | rtrim($value) |
| 半角スペースをすべて削除する | str_replace(' ', '', $value) |
| 半角・全角スペースを削除する | str_replace([' ', ' '], '', $value) |
| タブ・改行などを削除する | preg_replace('/\s+/', '', $value) |
| 全角スペースも含めて削除する | preg_replace('/[\s ]+/u', '', $value) |
| Unicode空白も考慮する | preg_replace('/[\s\p{Zs}]+/u', '', $value) |
| 複数の空白を1つにまとめる | trim(preg_replace('/[\s ]+/u', ' ', $value)) |
基本的には、次のように覚えるとよいです。
// 前後の空白を削除
$value = trim($value);
// 半角・全角スペースを削除
$value = str_replace([' ', ' '], '', $value);
// 半角スペース・全角スペース・タブ・改行を削除
$value = preg_replace('/[\s ]+/u', '', $value);
// 複数の空白を1つにまとめる
$value = trim(preg_replace('/[\s ]+/u', ' ', $value));
名前やメールアドレスのように前後だけ整えればよい場合は trim()、電話番号や郵便番号のように途中の空白も不要な場合は str_replace()、改行やタブ、全角スペースまでまとめて処理したい場合は preg_replace() を使うとわかりやすいです。
以上、PHPで空白を削除する方法についてでした。
最後までお読みいただき、ありがとうございました。










