改行処理
そふぃのPHP入門 >> PHP言語リファレンス >> PHPの基本文法 >> 改行処理

改行処理

ブラウザ上での改行

  • "<br />"とHTMLタグを入れる

ソース上での改行

  • "\n"と特殊文字を入れる

ブラウザ上で改行

PHPスクリプト中に改行を入れてもブラウザでの表示結果には反映されません。ブラウザはHTML文書を解釈して表示するアプリケーションですのでブラウザ上で改行するにはHTMLの<br />タグを入れなければいけません。

んでもってPHPでHTMタグというのは「文字列」として扱われます。つまり、他の文字と同じでクォートが必要になります。

改行処理サンプル
<html>
<head>
<title>改行処理テスト―そふぃのphp入門</title>
</head>
<body>
  1. <?php
  2. print "1行目:改行して出力<br />";
  3. echo "2行目:改行後のライン";
  4. ?>
</body>
</html>

実行結果

このように、PHPでHTMLタグを出力したい時は文字列として括る事を忘れないで下さい。括らずに書くとエラーになります。

ソース上で改行

次に上記の実行結果を「右クリック→ソースの表示」でソース表示してみて下さい。PHPコードの部分がソース上では改行されていない事が分かると思います。具体的にはスクリプト上では改行したprint文の後ろとPHPスクリプトが終了してHTML文書に戻っている</body>のところです。

PHPは改行・タブ・空白などをすべて無視して出力します。<br />タグを入れたのでブラウザ上では改行されましたが、ソースというのはテキストです。これを改行させるにはテキストでの改行コードというものを入れなければいけません。ブラウザで改行というのが<br />と決まっているように、テキストにも改行コードが決まっています。

とりあえずいろいろな仕組みの話は後にして、コードを先に書いておきます。改行コードってのが特殊文字として「\n」で表されるのでテキストで改行したいところに「\n」を入れます。この特殊文字の改行(\n)も「文字」して扱われるのでクォートの中にいれて欲しいのですが、括りはサンプルと同じように「"」ダブルクォーテーションにして下さい。

ソース上での改行サンプル

  1. <?php
  2. // この場合のクォートは「"」(ダブルクォーテーション)にして下さい。
  3. print "1行目<br />\n";
  4. echo "2行目\n";
  5. ?>

実行結果

ソースの表示で確認するとソースもちゃんと改行されてると思います。

このサンプルの括りを「'」(シングルクォーテーション)にすると「\n」がそのまま出力され、ソース(テキスト)上での改行はされません。改行コードは「文字」として扱われていると説明しましたが、「文字」は文字でも特殊文字という扱いです。特殊文字には他にタブや「\」などがありますが、「'」(シングルクォーテーション)は特殊文字を理解しないようにできているのに対し、「"」(ダブルクォーテーション)は特殊文字を理解します。ちなみにヒアドキュメントも特殊文字を理解するので「"」(ダブルクォーテーション)と同じ動作になります。さらに詳しい「"」と「'」の違いは次の文字列のエスケープでやりますので、とりあえず今は「'」だと\nを入れてもソースの改行がされないと思ってくれていいです。

改行の仕組み

テキストエディタは文字コードを使って文字を読み書きできるようにしたソフトです。あまり意識する事はないと思いますがテキストエディタで操作する「改行」にも文字コードがあります。エディタで改行する時には「Enter」キーなどを押していると思います。この操作によって今の行から次の行へと改行が行われているわけですが、これは改行する場所に改行コードってのを入れてるわけです。改行マークがつくエディタなんかもありますが、そのマークがついてるところが改行コードが入ってるところです。

改行コードはには大体以下の3種類があります。

  1. LF(Unix/Linux標準)
  2. CR(Macintosh標準)
  3. CR+LF(Windows標準)

最後のCR+LFはCRとLFを両方で「改行」という意味になるということです(CRLF)。この改行コードを出力するための特殊文字というものが定められています。

特殊文字 改行コード ASCII 説明
\n LF 0x0A(10) ラインフィード
\r CR 0x0D(13) キャリッジリターン

CR+LFは「\r\n」になります。ASCIIの欄はASCIIという文字コードの番号です。別に無理して覚えなくていいです。

つまり、テキスト上で改行したい場合はこの特殊文字を入れればいいわけですが、サンプルでは「\n」を使いました。LF(\n)はUnix/Linuxと説明してあるのでWindowsの人は迷うでしょうが、WindowsでもLF(\n)は改行と認識されます。サーバPCにはUnix系を使っているところも多いですし、「\n」が一般的なので「\n」で問題ないでしょう。ただし、一部の携帯端末などはCRLFつまり「\r\n」でないと改行されないとかあるみたいです。「\n」が使えなければ各自で変更して使用して下さい。

応用処理

実はecho()文もprint()文も複数行にわたる記述が可能です。括りの中はすべて文字列として扱われるのでテキスト(コード)上で改行してあるとその部分もちゃんと文字列として処理してくれます。

echo文1回で複数行の記述

  1. <?php
  2. echo '一回のecho文で複数行の記述をしてみます<br />
  3. このようにブラウザ上で改行したい場合にはHTMLタグを入れなくてはいけませんが、<br />
  4. 括りの中にエディタ上での「改行」が含まれた場合には<br />
  5. 改行文字の\nをいちいち記述しなくても改行を解釈してくれます。
  6. '; // ここはわざと改行してクォーテーションとセミコロンのみで終了。
  7. ?>

実行結果 ←改行文字の「\n」入れませんでした。ソース表示してみて下さい。

このように、echo()文(print()文も同様)は1行でなくてはならないって決まりはありません。複数行にわたって記述できる事と、エディタ上での改行が「文字」として扱われているってのを利用したこんな書き方もあります。ソース表示してみると\nを書かなくてもソース上でちゃんと改行がされていると思います。これは文字の括りの中に改行コードも入れてしまったためです。