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


102

この質問は100万年もの間私を悩ませてきました...複数行を許可するtextareaを持つWebサイト(ユーザーのプロファイルの「Bio」など)を作成するときはいつでも、私は常に次のパラノイドコードを書くことになります。

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

では、<textarea name="Bio"></textarea>複数の行がある場合、ブラウザは何を送信しますか?


うわー、これは注目されない奇妙な質問だと思いました... 1時間で16票、狂気。
Timothy Khouri、2011年

それについて考えると、これに関連する問題に遭遇したことはありません。誰かが改行を入力すると、すべてのOS、MySQLクライアント、ブラウザなどで改行として表示されます。これは、ほとんどのソフトウェアが問題に対してある程度一貫した見方をしていることを意味しているように見えます。もちろん、何か重要なことをするつもりなら、いつもノーマライズします。
HalilÖzgür11年

「\ r \ n」に依存していて、ユーザーのBioの「HTML形式」バージョンを作成していて、「\ r \ n」に出くわしたことがないので、すべてを一括で処理すると、問題が発生します。 1つの<p>タグ。
Timothy Khouri、2011年

回答:


50

HTTPMIMEの仕様は、そのヘッダ行が\ rを\ n個で終わらなければなりません指定したが、彼らはTEXTAREAの内容をどうするかについて(一部は、彼らが明確であるならば、それはクリアされていないことを主張するだろう)明確ではありません。(たとえば、この問題に関するHTMLワーキンググループのこのスレッドを参照してください。)

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

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

私はそれが一般的に良い戦略だと思います:あなたが生産するものについては厳格であるがあなたが受け入れるものについては寛大です。あらゆる種類のラインターミネータを受け取ると想定する必要があります。(CRLFとLFに加えて、Mac OS-9はCRのみを使用しており、そのいくつかがまだ残っていることに注意してください。Unicode規格(セクション5.8)は、行末記号として認識される幅広い文字シーケンスを指定しています。ここにそれらのリストがあります。)


6
仕様がtextareaが生成するものを指定しているとは思いません。
マークトーマス

2
@Will:元の質問をもう一度読んでください。具体的には、ブラウザーがaのコンテンツをどのようにエンコードするかについて質問しますtextarea(これは、仕様、または少なくともTedの引用セクションが制約しないものです)。
ジョンバーソロミュー

2
@Mark-あなたは正しい。さまざまなフォーラムでその問題についての無限の議論があります。(参照1995年からこのスレッドを HTMLワーキンググループから。
テッドのHopp

2
この回答は編集する必要があります。最初はHTTP仕様を引用していますが、それはtextareasには関係ありません。
DuckMaestro

2
私はそうしましたが、答えはまだHTTPを引用することから始まります。含まれている引用は「メッセージヘッダーフィールド」を具体的に扱っていますが、textareasはメッセージヘッダーフィールドとして送信されません。textarea異なるメッセージ本文にエンコードされます。
DuckMaestro

30

<textarea></textarea>複数の行がある場合、ブラウザは何を送信しますか?

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

値がフォームから直接送信されるのではなくJavaScriptを介して読み取られる場合、ブラウザーの動作は異なります。IEとOperaはCRLFを含む文字列を返します。FirefoxとWebKitはLFを返します。そのため、JavaScript / XMLHttpRequestヘルプを使用して送信されるフォームは、どちらの形式でも送信される可能性があります。


JavaScriptは、プラットフォームを問わず、特定のブラウザで一貫して動作しますか?(たとえば、FirefoxはWindows、Mac、モバイルプラットフォームでLFを含む文字列を返しますか?)
Ted Hopp

1
@テッド:この動作は、Firefox、Opera、およびWebKitのプラットフォーム間で一貫しています。IE5 / Macはテスト済みですが、今は長い間使用されていませんが、そのブラウザーにはIE5 / Winと多くの違いがあります。
ボビンス、2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.