PHPでの改行方法(ブラウザとソース表示)と改行できない場合の対処法

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

PHPで改行させたいとき、意外とハマりました。

ブラウザで改行させても、ソースでは改行されていなかったり、改行文字が反映していなかったり…

HTML改行タグと改行文字を分けて考える必要がありました。

改行文字が反映しない場合や、改行文字の前にHTMLの改行タグを入れてくれるnl2br()も紹介します。

この記事を読めば、PHPの改行を使いこなすことができるでしょう。

 

ブラウザ上で改行する

まずは、ブラウザで改行して表示する方法を見ていきましょう。

改行タグ<br>で改行

ブラウザ表示

改行
されました。

ちゃんと改行されてブラウザに表示されました。

ちなみにhtml5は<br>ですが、xhtmlなどは<br />ですね。

改行タグ<br>も文字列同様きちんと''(クオート)で囲ってあげましょう。

改行タグ<br>はソースでは改行されない

先ほどのようにブラウザで改行されても、実はブラウザのソースを表示すると改行されていません。

ソース表示

改行<br>されません。

ブラウザのソースで見ると、改行タグ<br>も含め、改行されず一行で表示されています。

PHPで改行させたいとき、ここが混乱する元となります。

ソース上で改行する

改行文字”\n”で改行

ブラウザ表示

改行 いたしました。

ソース表示

改行
いたしました。

ブラウザ表示の方はよく見ると改行文字"\n"の箇所に半角スペースが入っていますが、改行されていませんね。

しかしソース表示を見ると改行されています。

改行文字 \n でなぜか改行されない場合

改行文字は""(ダブルクオート)で囲いましょう。

''(シングルクオート)で囲うと、改行文字を普通の文字列として出力してしまいます。

改行\nできません。

改行文字\n がそのまま表示されちゃってますね。

改行文字に関わらず、エスケープシーケンスは""(ダブルクオート)で囲うのがPHPの鉄則です。

''(シングルクオート)派のプログラマーは特に気を付けましょう。

改行文字はサーバーOSにより異なる

先ほどから「改行文字"\n"」という表現を使っていますが、実はサーバーOSにより改行文字は違います。

改行文字一覧

サーバーOS改行文字改行コード
UNIX系
Mac OS X
\nLF(ラインフィード)
Windows\r\nCR+LF
Mac(OS 9以前)\rCR(キャリッジリターン)

レンタルサーバーは大半がUNIX系なので、改行文字は"\n"が一般的だと思いますが、Windowsや古いMac上にローカル開発環境を構築している方や、Windowsサーバーの方は注意しましょう。

(ただ、Windowsマシンでも仮想環境上に Cent OS などで構築している方は問題ないでしょう。)

定義済み定数「PHP_EOL」でOSを気にせず改行

改行文字はLinuxやWindowsなど、サーバーのOSによって異なることはご紹介しました。

そこでPHPでは、OSを自動判定し改行文字を自動的に設定してくれる、定義済み定数PHP_EOLを用意しています。

ブラウザ表示

改行 しました。

ソース表示

改行
しました。

動作は改行文字"\n"と同じですね。

ブラウザとソース両方で改行する

改行タグ<br>と改行文字”\n”で改行

ブラウザ表示

改行
しました。

ソース表示

改行<br>
しました。

改行タグ<br>と改行文字\nを並べて記述したら、ブラウザでもソース上でも改行されました。

ヒアドキュメントで改行

実はヒアドキュメントで改行タグ<br>だけで、ブラウザ上でもソース上でも改行されるんです!

ブラウザ表示

改行
されました。

ソース表示

改行<br>
されました。

先ほどと同様、ブラウザでもソース上でもきちんと改行してくれました。

ちなみに、最後の区切り文字(EOD;など)の後に改行がないとエラーになります。

改行を入れるようにしましょう。

参考:PHPのヒアドキュメントでの簡単出力と、よくあるエラー

改行を削除する

改行タグと改行文字とその両方を削除する方法です。

改行タグを削除

HTMLの改行タグ<br>を削除します。

ブラウザ表示

改行を削除して処理します。ダブルクオートじゃないと改行文字は扱えません。

ソース表示

改行を削除して処理します。
ダブルクオートじゃないと改行文字は扱えません。

str_replace()で改行タグ<br>を空文字に変換することで削除しました。

参考:PHPで文字列を削除する2つの方法

改行タグ<br>なので、ソース上は改行されたままです。

改行文字を削除

改行文字\n を削除します。

ブラウザ表示

改行を削除して処理します。
ダブルクオートじゃないと改行文字は扱えません。

ソース表示

改行を削除して処理します。<br>ダブルクオートじゃないと改行文字は扱えません。

改行文字だけ削除されたため、ソース上では改行が削除されましたが、ブラウザ上では改行されたままです。

改行タグと改行文字をいっぺんに削除

str_replace()で改行タグと改行文字を両方指定し、削除します。

改行文字だけはダブルクオートで囲うのを忘れないようにしましょう。

ブラウザ表示

改行を削除して処理します。ダブルクオートじゃないと改行文字は扱えません。

ソース表示

改行を削除して処理します。ダブルクオートじゃないと改行文字は扱えません。

改行タグも改行文字も削除されたため、ソース、ブラウザ両方で改行を削除できました。

改行文字の前にHTML改行タグを挿入する

PHPには改行文字"\n"の前に改行タグ<br><br />)を挿入する便利なnl2br()があります。

nl2br関数

ブラウザ表示

改行
されました。

ソース表示

xhtml準拠
改行<br />
されました。

html5
改行<br>
されました。

nl2br関数の構文

nl2br(改行文字を含む文字列(, xhtml準拠を使うか否か(省略可)))

  • 第二引数を指定しないかtrueならxhtml準拠の改行タグ<br />を表示
  • 第二引数がfalseの場合、html5の改行タグ<br>を表示

ブログアプリなどを作る際、データベースに改行文字を含む記事本文を格納し、記事を出力するときにこの関数を使うと、自動で改行タグを含めて出力されるので便利でした。

 

mac OSで \(バックスラッシュ)を表示する方法

オマケですが、macで改行文字を入力する際、\(バックスラッシュ)を表示させたいときに分からないことがあったので、載せておきます。

バックスラッシュ

option + ¥

 

Windowsだと¥(円マーク)ですね。

 

わたくし、シングルクオート派なもので、改行文字が効かないことでハマったことがあります。

改行タグ<br>とも混同してしまい、ゴチャゴチャになった経験があったため、ここに載せました。

これでPHPの改行を使いこなしましょう。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*