ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

改行コードの話

 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のモード

 主に、サーバとクライアント間のファイルのやりとりは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>などに変換するなどすればいいでしょう。



Copyright (C)1995-2002 ASH multimedia lab.
mail : info@ash.jp