PHPの改行について詳しく解説!|意外と知らない?押さえておきたい改行のポイント
- システム
エンジニア - PHPの改行はわりと簡単なので理解しているつもりですが、なにか注意点はありませんか。
- プロジェクト
マネージャー - PHPはHTMLで表示することが多いので、いろいろと注意する点があります。それらについて、解説いたしましょう。
PHPの改行とは?
改行とは文字列を表示する処理で、次の行に移ることを意味します。どのプログラミング言語でも簡単にできますが、PHPの場合はテキストをHTMLとして表示することが多いので、他の言語とは少しやり方が変わってきます。
PHPを使ってHTMLブラウザでテキストを出力する場合は、以下のようにHTMLの改行タグの<br>を使用すると改行できます。
1
2
|
echo "あいうえお<br>かきくけこ";
|
あいうえお
かきくけこ
HTMLの改行タグについて
なおHTMLとHTML5では改行タグは<br>ですが、XHTMLではXMLの文法に厳密なため<br />です。ただしXHTMLは現在開発中止になっているので、あまり考慮する必要はないでしょう。なおHTMLやHTML5で<br />と記述しても改行はできます。
他に改行できるHTMLタグは<p>があります。以下でも改行を行えます。ただしこのタグはパラグラフ(文節)を意味するタグのため、ブラウザによっては行間が1行空きます。
1
2
|
echo "<p>あいうえお</p><p>かきくけこ</p>";
|
他には<div>でもpと同様に改行ができます。ただしこちらは空行が入りません。
1
2
|
echo "<div>あいうえお</div><div>かきくけこ</div>";
|
サーバ内のファイル出力での改行
PHPはHTMLの出力しかできないわけではなく、例えば同じサーバ上のテキストファイルへの書き込みもできます。その場合の改行は以下のように\n
を使用します。
1
2
|
file_put_contents("./log.txt", "あいうえお\nかきくけこ");
|
\n
のように先頭に\
がつく文字をエスケープシーケンスと言います。これを使う場合、文字列の両端には’(シングルクォーテーション)ではなく”(ダブルクォーテーション)を使用します。’では\n
で改行せずにそのまま表示されてしまいます。
なおサーバのOSによって改行コードは以下のように変わります。PHPを使う場合のOSはUNIX/Linuxがほとんどなので、\n
で改行できます。
1
2
3
4
|
Windows<code>\r\n
Mac<code>\r
UNIX/Linux<code>\n
|
改行コードの意味は?
なぜOSによってテキストの改行コードが違うのでしょうか。\r
はCR、\n
はLFを意味し、CRは「キャリッジリターン」、LFは「ラインフィード」の略語です。この2つの言葉は、元々タイプライターの機能の名前です。
タイプライターとは19世紀にヨーロッパで生まれた個人向けの文書作成ができる機械で、「電気を使わないワープロ」のようなものです。
キャリッジリターンはタイプライターの印字ヘッドが左端まで移動することを意味し、ラインフィードは紙を1行送るという意味です。Windowsの\r\n
はその名残と言えます。MacやUnixは2つの\r\n
の片方を省略して1つになっているということです。
PHPのエスケープシーケンスについて
PHPのエスケープシーケンスは\r
や\n
以外に以下のようなものがあります。
\t タブ
\\ \文字
\$ $文字
\( 左カッコ
\) 右カッコ
\[ 左カッコ
\] 右カッコ
\' シングルクォーテーション
\" ダブルクォーテーション
\nnn 8 進数表記
\xnn 16 進数表記
例えば’や”を表示したいと思っても、文字列を囲む記号のため普通に表示することはできません。そう言った場合は以下のようにすれば表示できるのです。
1
2
|
echo "ダブルクォーテーションは\"です。";
|
実行すると、以下のように表示されます。
ダブルクォーテーションは”です。
PHPではPHP_EOLを使用できる
上で言ったようにOSによって改行コードは異なります。そこでPHPにはPHP_EOLと言う改行の定数が用意されています。以下のように使用できます。
1
2
|
file_put_contents("./log.txt", "あいうえお" . PHP_EOL . "かきくけこ");
|
これでOSの違いを考慮せずに改行することができます。この方が移植性が向上するので、是非PHP_EOLを使用しましょう。
nl2brで改行コードを変換できる
PHPにはnl2brという、\r
や\n
の改行コードを<br>に変換する関数があります。以下のように使うことができます。
1
2
3
|
$str = "あいうえお" . PHP_EOL . "かきくけこ";
echo nl2br($str);
|
実行してブラウザでソースをみると、改行タグに変わっていることがわかります。
あいうえお<br />
かきくけこ
なお<br />ではなく<br>にしたい場合は、nl2br($str, false);のように第2引数にfalseを指定すると<br>になります。古いバージョンのPHPでは2つ目の引数は指定できないので注意してください。
str_replaceで改行を除去する
ここまで改行を付加する方法を解説しましたが、これ以後は文字列の改行を除去する方法を紹介します。最初はstr_replace関数を使う方法です。以下をご覧ください。
1
2
3
|
$str = "あいうえお" . PHP_EOL . "かきくけこ";
file_put_contents("./log.txt", str_replace(PHP_EOL, "", $str));
|
実行すると、
あいうえおかきくけこ
と出力されます。改行がなくなっていることがわかりますね。
preg_replaceで改行を除去する
preg_replaceという関数でも改行を除去できます。以下を実行すると改行がなくなります。
1
2
3
|
$str = "あいうえお" . PHP_EOL . "かきくけこ";
file_put_contents("./log.txt", preg_replace('/\r\n|\r|\n/', '', $str));
|
preg_replaceは正規表現でマッチした箇所を除去します。このサンプルでは「\r\nか\rか\n
」と言う意味です。正規表現は非常に多くのことができるので、興味がある人は調べてみてください。
trimで改行を除去する
trim関数は文字列の前後のスペースやタブを除去しますが、改行も除去できます。以下のサンプルをご覧ください。
1
2
3
|
$str = PHP_EOL . "あいうえお" . PHP_EOL . "かきくけこ" . PHP_EOL;
file_put_contents("./log.txt", trim($str));
|
結果は、
あいうえお
かきくけこ
となります。前後の改行は消えますが、文字列の途中の改行は残ります。
配列を改行で分割して表示する
文字列を改行毎に分割して配列変数に格納したい場合は、以下のようにします。
1
2
3
4
|
$str = "あいうえお" . PHP_EOL . "かきくけこ" . PHP_EOL . "さしすせそ";
$ary = explode(PHP_EOL, $str);
print_r($ary);
|
実行すると、以下のように表示されます。なおprint_rにはこのように配列を分解して表示する機能があります。
1
2
|
Array ( [0] => あいうえお [1] => かきくけこ [2] => さしすせそ )
|
- システム
エンジニア - XHTMLでの改行は
で、サーバ上のテキストファイルの改行は を使うのですね。
- プロジェクト
マネージャー - その通りです。ぜひPHPの改行を使いこなせるようにしましょう。
PHPの改行を使いこなそう
PHPの改行について解説しましたが、いかがでしたでしょうか。ブラウザにHTMLを表示する時の改行と、サーバのテキストファイルに出力する時の改行の2通りありますが、ここでの知識を踏まえておけばもう困ることはないでしょう。
またこの記事で解説したエスケープシーケンスや正規表現についても学んでおけば、テキスト処理のスキルが上がって役立つことでしょう。是非学んでおいてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)