.net column

.NET開発者のためのブログメディア

PHPの改行について詳しく解説!|意外と知らない?押さえておきたい改行のポイント

2021年09月13日
SE
PHPの改行はわりと簡単なので理解しているつもりですが、なにか注意点はありませんか。
PM
PHPはHTMLで表示することが多いので、いろいろと注意する点があります。それらについて、解説いたしましょう。

PHPの改行とは?


改行とは文字列を表示する処理で、次の行に移ることを意味します。どのプログラミング言語でも簡単にできますが、PHPの場合はテキストをHTMLとして表示することが多いので、他の言語とは少しやり方が変わってきます。

PHPを使ってHTMLブラウザでテキストを出力する場合は、以下のようにHTMLの改行タグの<br>を使用すると改行できます。

結果は以下のようになります。

あいうえお
かきくけこ

HTMLの改行タグについて

なおHTMLとHTML5では改行タグは<br>ですが、XHTMLではXMLの文法に厳密なため<br />です。ただしXHTMLは現在開発中止になっているので、あまり考慮する必要はないでしょう。なおHTMLやHTML5で<br />と記述しても改行はできます。

他に改行できるHTMLタグは<p>があります。以下でも改行を行えます。ただしこのタグはパラグラフ(文節)を意味するタグのため、ブラウザによっては行間が1行空きます。

他には<div&gtでもpと同様に改行ができます。ただしこちらは空行が入りません。

サーバ内のファイル出力での改行

PHPはHTMLの出力しかできないわけではなく、例えば同じサーバ上のテキストファイルへの書き込みもできます。その場合の改行は以下のように\nを使用します。

\nのように先頭に\がつく文字をエスケープシーケンスと言います。これを使う場合、文字列の両端には’(シングルクォーテーション)ではなく”(ダブルクォーテーション)を使用します。’では\nで改行せずにそのまま表示されてしまいます。

なおサーバのOSによって改行コードは以下のように変わります。PHPを使う場合のOSはUNIX/Linuxがほとんどなので、\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 進数表記

例えば’や”を表示したいと思っても、文字列を囲む記号のため普通に表示することはできません。そう言った場合は以下のようにすれば表示できるのです。

実行すると、以下のように表示されます。

ダブルクォーテーションは”です。

PHPではPHP_EOLを使用できる

上で言ったようにOSによって改行コードは異なります。そこでPHPにはPHP_EOLと言う改行の定数が用意されています。以下のように使用できます。

これでOSの違いを考慮せずに改行することができます。この方が移植性が向上するので、是非PHP_EOLを使用しましょう。

nl2brで改行コードを変換できる

PHPにはnl2brという、\r\nの改行コードを<br>に変換する関数があります。以下のように使うことができます。

実行してブラウザでソースをみると、改行タグに変わっていることがわかります。

あいうえお<br />
かきくけこ

なお<br />ではなく<br>にしたい場合は、nl2br($str, false);のように第2引数にfalseを指定すると<br>になります。古いバージョンのPHPでは2つ目の引数は指定できないので注意してください。

str_replaceで改行を除去する

ここまで改行を付加する方法を解説しましたが、これ以後は文字列の改行を除去する方法を紹介します。最初はstr_replace関数を使う方法です。以下をご覧ください。

実行すると、

あいうえおかきくけこ

と出力されます。改行がなくなっていることがわかりますね。

preg_replaceで改行を除去する

preg_replaceという関数でも改行を除去できます。以下を実行すると改行がなくなります。

preg_replaceは正規表現でマッチした箇所を除去します。このサンプルでは「\r\nか\rか\n」と言う意味です。正規表現は非常に多くのことができるので、興味がある人は調べてみてください。

trimで改行を除去する

trim関数は文字列の前後のスペースやタブを除去しますが、改行も除去できます。以下のサンプルをご覧ください。

結果は、

あいうえお
かきくけこ

となります。前後の改行は消えますが、文字列の途中の改行は残ります。

配列を改行で分割して表示する

文字列を改行毎に分割して配列変数に格納したい場合は、以下のようにします。

実行すると、以下のように表示されます。なおprint_rにはこのように配列を分解して表示する機能があります。

SE
XHTMLでの改行は
で、サーバ上のテキストファイルの改行は を使うのですね。
PM
その通りです。ぜひPHPの改行を使いこなせるようにしましょう。

PHPの改行を使いこなそう

PHPの改行について解説しましたが、いかがでしたでしょうか。ブラウザにHTMLを表示する時の改行と、サーバのテキストファイルに出力する時の改行の2通りありますが、ここでの知識を踏まえておけばもう困ることはないでしょう。

またこの記事で解説したエスケープシーケンスや正規表現についても学んでおけば、テキスト処理のスキルが上がって役立つことでしょう。是非学んでおいてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags