PHPでのプログラミングで誰もが一度は通る「改行」の処理。
一見簡単そうに見えても、
「OSによって挙動が違う」
「テキストファイルが意図通りに改行されない」
このような問題に直面することがよくあります。
そこでこの記事では、PHPにおける改行コードの基本から、\n
、<br>
、そしてPHP_EOL
といった要素の役割と違いなどについて初心者にもわかりやすく徹底的に解説します。
【本記事の信頼性】
- 執筆者は元エンジニア
- 大手プログラミングスクールのWebディレクター兼ライターを経験
- 自らも地元密着型のプログラミングスクールを運営
プログラミングスクール
■Webエンジニアの育成に特化 ■自社開発企業への転職成功率がダントツ ■ハイスキルを求める人に最適 |
|
■サポートは半永久的 ■単価80万円以上の講師陣 ■AWSやJavaに強い |
|
■受講料完全無料 ■最短1か月で卒業 ■教室への通学も可能 |
PHPで改行コードを削除・置換する基本コード
まずは結論からいくと、PHPで改行コードを削除したり置換したりする最も基本的な方法は、str_replace()
関数を使うか、preg_replace()
関数を使うかの2つです。
str_replace()を使う方法
str_replace()
は、指定した文字列を別の文字列に置き換えるための、非常にシンプルで高速な関数です。
改行コードのような決まった文字列を処理するのに適しています。
<?php
$text = "これはテストです。\r\nWindowsの改行コードと、\nLinuxの改行コードが混在しています。";
// 削除したい改行コードを配列で指定する
$search = ["\r\n", "\n"];
$cleaned_text = str_replace($search, '', $text);
echo $cleaned_text;
【実行結果】
これはテストです。Windowsの改行コードと、Linuxの改行コードが混在しています。
このコードでは、Windowsで使われる改行コード\r\n
と、LinuxやmacOSで使われる\n
の両方を削除しています。
str_replace()
の第1引数に、見つけたい文字列を配列["\r\n", "\n"]
の形で指定するのがポイントです。
こうすることで、配列に含まれる複数の改行コードをすべて、第2引数で指定した空文字''
(つまり「削除」)に置換できるのです。
特定の改行コードだけをシンプルに処理したい場合は、このstr_replace()
を使うのが最もわかりやすく効率的でしょう。
preg_replace()を使う方法
preg_replace()
は、正規表現を使って文字列の検索と置換を行う、より高機能で柔軟な関数です。
str_replace()
よりも複雑なパターンに対応できます。
<?php
$text = "これはテストです。\r\nWindowsの改行コードと、\nLinuxの改行コードが混在しています。";
// 正規表現の\Rは、あらゆる種類の改行コードにマッチします
$cleaned_text = preg_replace('/\R/', '', $text);
echo $cleaned_text;
【実行結果】
これはテストです。Windowsの改行コードと、Linuxの改行コードが混在しています。
このコードの鍵は、正規表現パターンの/\R/
にあります。
\R
は、\r\n
、\n
、\r
といった、さまざまなOSで使われるあらゆる種類の改行コードにマッチする、非常に便利なメタ文字です。
str_replace()
のように複数の改行コードを配列で指定する必要がなく、これ一つであらゆる改行コードを漏れなく捉えることができます。
そのため、どのような改行コードが含まれているか分からないテキストを扱う場合や、コードをよりシンプルに保ちたい場合にpreg_replace()
と\R
の組み合わせは絶大な効果を発揮します。
【パターン別】PHPにおける改行コードの置換・削除テクニック
基本的な削除方法を理解したところで、次に、より実践的な置換・削除のテクニックをパターン別に見ていきましょう。
改行コードを半角スペースに置換する
テキストを一行にしたいけれど、単語間の区切りは残したい、というケースはよくあります。
そのような場合は、改行コードを半角スペースに置換するのが有効です。
<?php
$text = "単語が\n改行によって\r\n区切られています。";
// すべての改行コードを半角スペースに置換する
$replaced_text = preg_replace('/\R/', ' ', $text);
echo $replaced_text;
【実行結果】
単語が 改行によって 区切られています。
この処理は、先ほどのpreg_replace()
の応用です。
第2引数を空文字''
から半角スペース' '
に変更しただけ。
\R
で検知したすべての改行コードが、指定した半角スペースに置き換えられているのがわかります。
改行コードを読点「、」に置換する
箇条書きで入力された項目を、一つの文章として繋げたい場合などに使えるテクニックです。
<?php
$list = "項目A\n項目B\n項目C";
// すべての改行コードを読点「、」に置換する
$replaced_text = preg_replace('/\R/', '、', $list);
echo $replaced_text;
【実行結果】
項目A、項目B、項目C
こちらもpreg_replace()
の第2引数を変更しただけです。
\R
で改行コードを検索し、それをすべて読点'、'
に置換しています。
このように、置換したい文字を自由に変えることで、さまざまなデータ整形に応用できるのがpreg_replace()
の強みです。
複数の連続した改行を1つにまとめる
ユーザーがフォームに入力したテキストには、しばしば不要な空行(連続した改行)が含まれていることがあります。
これらを一つにまとめることで、テキスト全体の見た目を整えることが可能です。
<?php
$user_input = "最初の段落です。\n\n\n次の段落まで、空行がいくつかあります。";
// 1回以上連続する改行(\R+)を、1つの改行(\n)に置換
$formatted_text = preg_replace('/\R+/', "\n", $user_input);
// ブラウザで表示確認するためにnl2brを使用
echo nl2br($formatted_text);
【実行結果】
最初の段落です。
次の段落まで、空行がいくつかあります。
このテクニックの核心は、正規表現'/\R+/'
にあります。
\R
の後ろにある+
は、正規表現における「量指定子」の一つで、「直前のパターンが1回以上連続する場合」に一致します。
つまり、\R+
と記述することで、「2連続、3連続といった連続する改行コード」を一つの塊として捉えることができるのです。
これをpreg_replace()
で単一の改行コード"\n"
に置換することにより、不要な空行がすっきりと除去され、段落間が適切な一行のスペースに整形されます。
PHPにおける\n・<br>・PHP_EOL の違い
PHPで改行を扱う上で混乱しやすいのが、\n
、<br>
、そしてPHP_EOL
の存在です。
これらは似ているようで、役割が全く異なります。
それぞれの違いを正確に理解することが、PHPでの改行処理をマスターする鍵となります。
種類 | 役割 | 主な利用シーン |
\n / \r\n |
テキストデータとしての改行コード | ソースコードの整形、テキストファイルへの書き込み |
<br> |
HTMLの改行タグ | Webブラウザ上での表示を改行させるとき |
PHP_EOL |
PHPの実行環境に合わせた改行コード定数 | OS環境に依存しないファイル出力など |
\n (LF) と \r\n (CRLF)
これらは、テキストファイルやソースコードの内部で使われる「本来の」改行コードです。
\n
(ラインフィード) はLinuxやmacOSで、\r\n
(キャリッジリターン+ラインフィード) はWindowsで主に使われます。
このOSによる違いが、時として文字化けや意図しない動作の原因となるのです。
PHPの文字列中では、ダブルクォーテーション""
で囲むことで改行として機能します。
<br>
<br>
は、PHPの機能ではなく、HTMLのタグです。
その役割はただ一つ、Webブラウザの表示を改行させること。
PHPでecho "\n";
と出力しても、HTMLソースコード上では改行されますが、ブラウザの見た目上は改行されません。
ブラウザで改行を表現したい場合は、必ずこの<br>
タグを出力する必要があります。
PHP_EOL
PHP_EOL
は、PHPにあらかじめ定義されている定数で、「End Of Line」の略です。
この定数を使うと、PHPが実行されているサーバーのOSに合わせた最適な改行コードを自動的に使用してくれます。
例えば、Windowsサーバー上で実行すれば\r\n
に、Linuxサーバー上で実行すれば\n
に自動的に置き換わります。
このため、サーバー環境に依存しない、移植性の高いコードを書きたい場合(特にファイル出力時など)に非常に役立ちます。
まとめ
以上、PHPで改行コードを削除・置換する方法について、基本的な関数から実践的なテクニック、そして背景となる知識までを詳しく解説しました。
なお、PHPを体系的に学んだり、PHPのスキルを高めたりするためには、プログラミングスクールを利用するのも有効です。
細かな疑問がすぐに解決するだけでなく、現役エンジニアが「質の高いポートフォリオ」を作成するための手助けをしてくれたり、エンジニア就職・転職のコツを教えてくれたりするなど、様々なメリットがありますので、独学に疲れた方は検討してみてはいかがでしょうか。