94

簡単ですが、クロスプラットフォームのバリエーションをキャッチしていることを確認したいと思います。

テキスト領域に入力された改行を [コンマ] に変換して、出力を 1 行で表現できるようにしたいのですが、質問...

\r\n現在、google chrome から送信して、値を表示すると、新しい行に使用されていることがわかります。置き換える\r\nと、Windows 7 のクロムで動作することがわかりますが、他のプラットフォームについてはどうでしょうか。他のブラウザーがテキスト領域内に新しい行として挿入するものにはバリエーションがありますか?

4

4 に答える 4

113

HTML 仕様により、ブラウザーはユーザー入力の改行を CR LF ( \r\n) に正規化する必要があり、どのブラウザーもこれを誤解しているとは思いません。参照: 条項 17.13.4 HTML 4.01 仕様のフォーム コンテンツ タイプ。

HTML5 ドラフトでは、フォームが送信されたときにサーバー側のフォーム ハンドラーに送信されるデータだけでなく、ブラウザー内のプロセスも処理するため、状況はより複雑になります。それら (およびブラウザーの慣例) によると、textarea要素の値は 3 つのバリアントに存在します。

  1. ユーザーが入力した生の値で、正規化されていません。CR、LF、または CR LF ペアを含む場合があります。
  2. 「API 値」と呼ばれる内部値。改行は LF (のみ) に正規化されます。
  3. インターネットの慣例に従って、改行が CR LF ペアに正規化されている送信値。
于 2013-01-08T14:37:48.147 に答える
12

すべてのプラットフォームで、すべてのテキストエリアについて、Web フォームのテキストエリアについて具体的に話す\r\nことはうまくいきます。

それ以外のものを使用すると、Windows プラットフォームでのカット アンド ペーストで問題が発生します。

改行は、フォームの送信時に Windows ブラウザーによって正規化されますが、改行を含むフォームをブラウザーに送信する\nと、たとえばメモ帳とテキストエリアの間でテキストが正しくコピー アンド ペーストされないことがわかります。

興味深いことに、Unix の行末規則は であるにもかかわらず、\nHTTP、SMTP、POP3、IMAP などを含むほとんどのテキストベースのネットワーク プロトコルの標準は依然として\r\nです。はい、あまり意味がないかもしれませんが、それは歴史と進化する標準です!

于 2013-01-08T14:29:24.997 に答える
6

- Line Feed and 
 Carriage Return

これらのHTML エンティティ は、テキスト領域内に新しい行またはキャリッジ リターンを挿入します。

于 2014-03-22T19:39:11.863 に答える
6

HTML5 仕様によると、textarea 要素の value プロパティは、改行に対して '\r\n' を返す必要があるようです。

要素のは、次の変換が適用された要素の生の値として定義されます。

「LF」(U+000A) 文字が続かない「CR」(U+000D) 文字のすべての出現、および「CR」が先行しない「LF」(U+000A) 文字のすべての出現 ( U+000D) 文字、U+000D CARRIAGE RETURN "CRLF" (U+000A) 文字ペアで構成される 2 文字の文字列。

'value' へのリンクをたどると、javascript でアクセスされる value プロパティを参照していることがわかります。

フォーム コントロールには、値とチェック状態があります。(後者は入力要素でのみ使用されます。) これらは、ユーザーがコントロールと対話する方法を記述するために使用されます。

ただし、5 つの主要なブラウザすべて (Windows を使用、2015 年 11 月 27 日) では、'\r\n' がテキストエリアに書き込まれると、'\r' が取り除かれます。(テストするには: var e=document.createElement('textarea'); e.value='\r\n'; alert(e.value=='\n');) これは v9 以降の IE に当てはまります。それ以前は、IE は '\r\n' を返し、'\r' と '\n' の両方を '\r\n' に変換していました (これは HTML5 仕様です)。だから...私は混乱しています。

安全のために、通常は正規表現で「\n」の代わりに「\r?\n」を使用するだけで十分ですが、改行シーケンスを知る必要がある場合は、上記のようなテストをアプリで実行できます。

于 2015-11-27T16:28:57.053 に答える