1. ホーム
  2. html

[解決済み] ブラウザは" \rn" と "\n" のどちらを送るのですか?

2022-12-09 03:27:49

質問

この質問には 100 万年前から悩まされています。複数行を許可するテキストエリア (ユーザーのプロファイルの "Bio" など) を持つウェブサイトを作成すると、いつも次のような偏執的なコードを書くことになります。

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

では、ブラウザが送信する <textarea name="Bio"></textarea> に対して何を表示するのでしょうか?

どのように解決するのですか?

この HTTP MIME の仕様では、ヘッダーラインは \n で終わらなければならないと規定していますが、TEXTAREA の内容をどうするかについては明確ではありません(明確であっても明確ではないと主張する人もいます)。 (たとえば このスレッド を参照してください)。

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

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

それは一般的に良い戦略だと思います。生成するものについては厳しく、受け入れるものについては自由に。あらゆる種類の行終端記号を受け取ることを想定すべきです。(なお、Mac OS-9 では、CRLF と LF に加えて、CR も単独で使用されていましたし、今でもいくつか残っているようです。その ユニコード標準 (セクション 5.8) は、行終端文字として認識されるべき広範囲の文字列を指定しており、それらのリストがあります ここに .)