PHPの文字列の改行コードとHTMLへ出力時のnl2br関数での置換

PHPなどプログラム上での改行はちょっと注意が必要です。

プログラムは基本的に改行やスペースを認識しません。

1行のプログラムの終了はPHPの場合だと ; までとなります。

でも文字列をログや画面に出力する際に、改行させてきれいに表示したいと思いますよね?

文字列内の改行は改行として認識してくれますが、その改行を入れる方法を以下に説明します。

目次

PHPの文字列内の改行

PHPの文字列を改行させるためには、改行コードを挟む必要があります。

その改行コードを挟む方法は以下の3つがあります。

エスケープ文字(\n)を使って改行

文字列内で使うエスケープ文字については以前にも触れました。

≫ PHPの文字列の検索や分割、置換などの基本操作とエスケープ文字

 

エスケープ文字の \n を使うと文字列に改行を挿入することが出来ます。

例えば次のように文字列を定義しログに出力したとします。

$str = "あいうえお\nかきくけこ\nさしすせそ\n";
error_log($str, 3, "kaigyo.log");

ログの内容は、

あいうえお
かきくけこ
さしすせそ

のようになります。

 

ちなみにUNIX系のOSは \n ですが、Windowsの場合は \r\n のように書きます。

Windows環境でXAMPPなどでテストする場合は \r\n のように書かないと改行されません。

UNIX環境で \r\n と書いても正常に改行されます。

文字列定義時に普通に(?)改行

まあ、エスケープ文字の改行を上で紹介しましたけど、普通に文字列で改行しても同じように改行できます。

$str = "あいうえお
かきくけこ
さしすせそ";
error_log($str, 3, "kaigyo.log");

このように書いても、

あいうえお
かきくけこ
さしすせそ

のようになります。

 

この方法だったら環境依存は無かったと思います。

「・・・と思います。」というのは、あまり使わない方法だからです。

プログラムコード的に問題は無いのですが、コードの見た目がかなりださくなります。

 

上記のサンプルコードだと分かりづらいですが、インデントされると猛烈にださくなります。

if ($v == 0) {
	$str = "あいうえお
かきくけこ
さしすせそ";
} else {
	$str = "たちつてと
なにぬねの
はひふへほ";
}
error_log($str, 3, "kaigyo.log");

改行した次の行は、インデント無しで行の先頭から書かないといけません。

改行した次の行をインデントすると、インデントした分の余計な余白が文字列として認識されてしまいます。

見た目がださくなりますし、何より読みづらくなってしまうため僕は使いません。

PHP_EOLを使って改行

PHP_EOLは実行環境のOSに対応する改行コードを出力する定数になります。 例えば、Windows環境の改行コードは 「\r\n(CRLF)」 Linux/Unix系、MacOS等の改行コードは「\n(LF)」になります。

引用:TechAcademyマガジン

PHP_EOLは環境に依存しない改行コードです。

便利ですね。

これを使って、

$str = "あいうえお".PHP_EOL."かきくけこ".PHP_EOL."さしすせそ";
error_log($str, 3, "kaigyo.log");

のように書けば、

あいうえお
かきくけこ
さしすせそ

のようになります。

 

ただ、文字列の中に一緒に書くことは出来ず、改行ごとに文字列を連結し、間に PHP_EOL を挟んで改行する必要があります。

これは面倒ですし、見た目的にもちょっと見づらくなります。

通常はシステムを搭載する環境はプログラミングの前に分かることなので、ちゃんと環境に合わせた”\n”などを使えば問題ないかと思います。

HTMLへnl2br関数で出力

上で紹介した内容は文字列に改行を挿入するというものでした。

ログだけでなくメールの文章を作成したりする場合などにも使えます。

しかし、画面に出力するときには上記の方法だけでは改行は挟めません。

 

例えば以下のようはHTMLがあったとします。

<div>
あいうえお
かきくけこ
さしすせそ
</div>

これを表示するとどうなると思いますか?

答えは、改行されないです。

HTMLもスペースや改行は認識されないので、表示時に改行されずに表示されてしまうのです。

<div>
<?php
$str = "あいうえお\nかきくけこ\nさしすせそ";
echo $str;
?>
</div>

のように書いた結果と同じになります。

 

HTMLで改行するためには<br>というタグが必要です。

そして、PHPで作成した改行を含む文字列の改行コードを<br>に置換してくれる便利な関数がPHPにはあります。

それが、nl2br() です。

 

nl2br()の引数に改行コードを含めた文字列をセットするだけで、HTMLの改行タグに変換された文字列を返してくれます。

<div>
<?php
$str = "あいうえお\nかきくけこ\nさしすせそ";
echo nl2br($str);
?>
</div>

のように書いて画面に出力すると、

<div>
あいうえお<br />
かきくけこ<br />
さしすせそ
</div>

のように出力してくれて、ブラウザで表示したときにも改行して表示されます。

まとめ

PHPもHTMLも、通常は改行を認識されない。

PHPの文字列内に書いた改行は改行と認識してくれるが、見た目がださいのであまり使わない。

文字列内に改行のエスケープ文字 \n を挿入すると改行できる。Windowsの場合は \r\n となる。

環境に依存しない改行コードとして PHP_EOL があるが、文字列内に挿入は出来ず、行ごとに連結する必要がある。

改行を挿入した文字列をそのままHTMLに出力しても改行されない。

HTMLに出力するためには \n などの改行コードをHTMLの改行タグ <br /> に変換しないといけない。

変換はPHPの nl2br() を使えば一発でできます。

この記事を書いた人

ライターのプロフィールが入ります。このライター情報を入れたくない場合は管理画面の ユーザー > あなたのプロフィールの「プロフィール情報」を未入力にすれば表示されません。逆に「プロフィール情報」を入力することでライター情報を表示できます。

コメント

コメントする

CAPTCHA


目次
閉じる