web-dev-qa-db-ja.com

ブラウザは「\ r \ n」または「\ n」を送信しますか、それともブラウザに依存しますか?

この質問は何百年も私を悩ませてきました...複数行(ユーザーのプロファイルの「バイオ」など)を許可するテキストエリアを持つWebサイトを作成するたびに、常に次の偏執的なコードを書くことになります。

// C# code sample...
bio = bio.Replace("\r\n", "\n").Replace("\r", "\n");
bio = Regex.Replace(@"\n{2,}", "\n\n");

したがって、ブラウザは<textarea name="Bio"></textarea>複数行ある場合

100
Timothy Khouri

[〜#〜] http [〜#〜] および [〜#〜] mime [〜#〜] 仕様は、ヘッダー行が\ r\nで終わる必要があることを指定します。 、しかし、彼らはTEXTAREAの内容をどうするかについて明確ではありません(明確であるかどうか明確でないと主張する人もいます)。 (たとえば、問題に関するHTMLワーキンググループの this thread を参照してください。)

以下は、メッセージヘッダーに関するHTTP/1.1仕様からの引用です。

メッセージヘッダーフィールドの行末記号は、CRLFシーケンスです。ただし、このようなヘッダーを解析する場合、アプリケーションは単一のLFを行終端記号として認識し、先頭のCRを無視することをお勧めします。

それは一般に良い戦略だと思います:あなたが生産するものには厳格であるが、受け入れるものには寛大である。あらゆる種類のラインターミネータを受け取ると想定する必要があります。 (CRLFとLFに加えて、Mac OS-9はCRのみを使用しましたが、まだいくつかあります。 nicode標準 (セクション5.8)は、行末記号として認識されるべきです;それらのリストがあります here 。)

48
Ted Hopp

ブラウザは<textarea></textarea>複数行ある場合

最新のブラウザはすべてCRLF(\r\n)。ただし、これは十分に標準化されたものではないため、すべての複数行入力テキストの改行を正規化することは価値があると確信しています。

値がフォームから直接送信されるのではなくJavaScriptを介して読み取られる場合、ブラウザーの動作は異なります。 IE and Opera CRLFを含む文字列を返します。FirefoxとWebKitはLFを返します。形。

29
bobince