web-dev-qa-db-ja.com

テキスト領域の改行を表す文字

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

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

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

71
Nnoel

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ペアに正規化されている提出値。
90

すべてのテキストエリア、すべてのプラットフォームで、Webフォームのテキストエリアについて具体的に説明すると、\r\nが機能します。

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

フォームが送信されると、改行がWindowsブラウザーによって正規化されますが、\n改行を使用してブラウザーにフォームを送信すると、テキストがメモ帳とコピーの間で正しくコピーおよび貼り付けされないことがわかりますテキストエリア。

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

11
Ben

- Line Feed and 
 Carriage Return

これらの HTMLエンティティ は、テキスト領域内に改行または改行を挿入します。

7
Damodar Das

HTML5仕様 によれば、textarea要素のvalueプロパティは、改行に対して '\ r\n'を返すはずです:

要素の value は、次の変換が適用された要素の生の値になるように定義されます。

「LF」(U + 000A)文字が後に続かない「CR」(U + 000D)文字のすべての出現、および「CR」が前にない「LF」(U + 000A)文字のすべての出現を置換します( U + 000D)文字、U + 000Dキャリッジリターン「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');)これはIEに当てはまりますv9以降。それ以前は、IEは '\ r\n'を返し、 '\ r'と '\ n'の両方を '\ r\n'(HTML5仕様)に変換していました。だから...私は混乱しています。

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

5
barncat