簡単なものですが、クロスプラットフォームのバリエーションをキャッチしていることを確認したいです。
テキスト領域に入力された新しい行を[コンマ]に変換して、出力を1行で表すことができるようにしたいのですが...
現在、google chromeから送信し、値を表示すると、新しい行に\r\n
が使用されていることがわかります。 \r\n
を置き換えると、Windows 7のchromeで機能することがわかりますが、他のプラットフォームについては、他のブラウザーがテキスト領域内に新しい行として挿入するものにバリエーションがありますか?
HTML仕様により、ブラウザはCR LF(\r\n
)へのユーザー入力の改行を正規化する必要があり、ブラウザがこれを誤るとは思わない。参照:条項17.13.4 フォームコンテンツタイプ HTML 4.01仕様。
HTML5ドラフトでは、フォームが送信されたときにサーバー側のフォームハンドラーに送信されるデータだけでなく、ブラウザー内のプロセスも処理するため、状況はより複雑です。それら(およびブラウザの慣習)によると、 textarea
要素の値は3つのバリアントに存在します:
すべてのテキストエリア、すべてのプラットフォームで、Webフォームのテキストエリアについて具体的に説明すると、\r\n
が機能します。
他のものを使用すると、Windowsプラットフォームでのカットアンドペーストで問題が発生します。
フォームが送信されると、改行がWindowsブラウザーによって正規化されますが、\n
改行を使用してブラウザーにフォームを送信すると、テキストがメモ帳とコピーの間で正しくコピーおよび貼り付けされないことがわかりますテキストエリア。
興味深いことに、Unixの行末規則は\n
ですが、HTTP、SMTP、POP3、IMAPなどを含むほとんどのテキストベースのネットワークプロトコルの標準は\r\n
のままです。はい、それはあまり意味をなさないかもしれませんが、それはあなたにとって歴史と進化する基準です!
- Line Feed and Carriage Return
これらの HTMLエンティティ は、テキスト領域内に改行または改行を挿入します。
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」を使用するだけで十分ですが、改行シーケンスが必要な場合は、アプリで上記のようなテストを実行できます。