htmlでは基本的に改行コードは無視されるものなので、あまり気にならない部分ではありますが、cgiなどのプログラムを作る場合などには必須の知識となります。
ここでは、一般的な改行コードの種類と注意点などについて解説します。
なお、改行コードの話には文字コードの知識が前提として必要なので、「文字コードについて」も参考にして下さい。
まず、基本的な改行コードの種類についてです。
一般的に、改行コードは次の2種類のコードのどちらか、もしくは組み合わせであらわされます。
記号 | 呼び名、別名 | ASCIIコード | マッチング |
---|---|---|---|
LF | ラインフィード(Line Feed)、ニューライン(New Line) | 0A | \n |
CR | キャリッジリターン(Carriage Return)、リターン(Return) | 0D | \r |
上のマッチングとは、プログラム言語などでそれぞれにマッチングする記号です。CGIなどで改行コードを処理する際にはこの記号を使用します。
ちなみに、キャリッジリターンとは、タイプライターで、次行へ行く際にCarriageを移動させたことからきています。
さて、CRとLFによって改行コードはあらわされるわけですが、機種によって改行コードは異なります。
改行コード | 使用機種 |
---|---|
LF | UNIX系OS |
CR | マッキントッシュ |
CR+LF | Windows(MS-DOSやWindowsNTも同様です) |
OSによって、改行コードが異なるので、クライアントのOSを限定できないWebプログラミングでは、注意が必要になります。
改行コードに関係するちょっと役に立つかもしれない話です。わりと常識かもしれませんが。
主に、サーバとクライアント間のファイルのやりとりはFTPを使って行います。
そこで、テキストファイル(htmlファイルやCGIのソースも含む)をやりとりするとき、
サーバ側とクライアント側で改行コードが異なる場合があります。(たとえば、UNIXサーバにWindowsマシンからFTPするとき)
このとき、改行コードをそのまま送ると、WindowsではCR+LFの改行コードを使用しているのに、UNIXではLFだけで改行コードとみなされ、プログラムなどでは余ったCRのせいで誤動作を起こす場合があります。
そこでFTPの2つのモードを使い分ける必要があります。
Asciiモード(Aモード) | Asciiコード(テキスト)を転送するためのモード、改行コードを変換してくれる。 |
binaryモード(Bモード) | binaryファイルを転送するためのモード、改行コードを変換しない。 |
FTPソフトには、必ずこれを切り替える機能が存在しますので、必要に応じて切り替えて使いましょう。
また、拡張子によってモードを切り替える機能などもたいていはついていますので、.htmや.txt、あるいは.cgiや.plなどではAsciiモードを使うように設定しておくのがいいでしょう。
ちなみに、画像ファイルなどをAscii転送するとデータが壊れてしまうので注意しましょう。
CGIなどで、改行コードを統一するときの例です。
$val =~ s/\r\n/\r/g; $val =~ s/\n/\r/g; |
これは、perlで改行コードを統一するためのスクリプト例です。 CR+LFをCRに変換した後に、LFをCRに変換しています。 これによって、改行コードはCRに統一されますので、その後に例えば<br>などに変換するなどすればいいでしょう。