PHPで空白を削除する方法について

採用はこちら

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

HelloWorld の間にあるスペースは残ります。

そのため、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回以上の連続
uUTF-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個以上
``
$文字列の末尾
uUTF-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で空白を削除する方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次