Karakter apa yang mewakili baris baru di area teks

88

Hanya cepat, tetapi ingin memastikan saya menangkap variasi lintas platform.

Saya suka mengubah baris baru yang dimasukkan ke dalam area teks menjadi [koma], sehingga hasilnya dapat direpresentasikan dalam satu baris, pertanyaan saya ...

Saat ini, mengirim dari google chrome, ketika saya melihat nilainya, saya merasa itu digunakan \r\nuntuk baris baru. Jika saya mengganti, \r\nsaya tahu ini akan berfungsi untuk chrome di windows 7, tetapi bagaimana dengan platform lain, apakah ada variasi tentang apa yang akan disisipkan browser lain sebagai baris baru di dalam area teks?

Ninjanoel
sumber
3
untuk menyederhanakan: Apakah semua browser hanya pernah mengirim '\ r \ n' untuk mewakili baris baru yang dimasukkan ke dalam area teks (Saya tidak secara terprogram membuat nilai, ini hanya pernah dibuat oleh pengguna di browser mereka)
Ninjanoel

Jawaban:

106

Berdasarkan spesifikasi HTML, browser diharuskan untuk mengkanonikalisasi jeda baris pada input pengguna ke CR LF ( \r\n), dan menurut saya tidak ada browser yang melakukan kesalahan ini. Referensi: klausul 17.13.4 Jenis konten formulir dalam spesifikasi HTML 4.01.

Dalam draf HTML5, situasinya lebih rumit, karena mereka juga menangani proses di dalam browser, bukan hanya data yang dikirim ke penangan formulir sisi server saat formulir dikirimkan. Menurut mereka (dan praktik browser), nilai textareaelemen ada dalam tiga varian:

  1. nilai mentah seperti yang dimasukkan oleh pengguna, tidak dinormalisasi; mungkin berisi pasangan CR, LF, atau CR LF;
  2. nilai internal, yang disebut "nilai API", di mana jeda baris dinormalisasi ke LF (hanya);
  3. nilai pengiriman, di mana jeda baris dinormalisasi ke pasangan CR LF, sesuai konvensi Internet.
Jukka K. Korpela
sumber
5
HTML 5 spesifikasi: w3.org/html/wg/drafts/html/CR/forms.html#the-textarea-element : the user agent should allow the user to edit, insert, and remove text, and to insert and remove line breaks in the form of "LF" (U+000A) characters.
ComFreek
Terima kasih, Anda membuat hari saya menyenangkan! Saya hanya bingung karena saat mengirim konten dari textarea di osx / chrome, browser mengirimkannya dengan CR LF ..
starikovs
3
Pertanyaan lain adalah mengapa ketika Anda mendapatkan ".length" dari textarea, itu menghitung CR LF hanya sebagai satu karakter tetapi ketika Anda memeriksa di sisi server (misalnya, dengan PHP strlen) itu akan menjadi dua karakter ...
starikovs
2
Tautan @ ComFreek di atas rusak hari ini, gunakan: w3.org/TR/html5/forms.html#the-textarea-element
Glen Mazza
@starikovs, saya kira ini telah dijawab dengan nilai internal, yang disebut "nilai API", di mana jeda baris dinormalisasi ke LF (hanya); bagian. Apa yang Anda lihat sebagai satu karakter (yaitu \n), mungkin adalah apa yang disediakan oleh "API internal". Tidak ada referensi, ini hanya anggapan saya berdasarkan akal sehat.
Dmitry Koroliov
12

Berbicara secara khusus tentang textarea dalam formulir web, untuk semua textarea, di semua platform, \r\nakan berfungsi.

Jika Anda menggunakan hal lain, Anda akan menyebabkan masalah dengan potong dan tempel pada platform Windows.

Jeda baris akan dikanonikalisasi oleh browser windows ketika formulir dikirimkan, tetapi jika Anda mengirim formulir ke browser dengan pemutusan baris \n, Anda akan menemukan bahwa teks tidak akan disalin dan ditempel dengan benar antara misalnya notepad dan textarea.

Menariknya, terlepas dari konvensi akhir baris Unix \n, standar di sebagian besar protokol jaringan berbasis teks termasuk HTTP, SMTP, POP3, IMAP, dan sebagainya masih \r\n. Ya, itu mungkin tidak masuk akal, tapi itulah sejarah dan standar yang berkembang untuk Anda!

Ben
sumber
7

- Line Feed and 
 Carriage Return

Entitas HTML ini akan memasukkan baris baru atau carriage return di dalam area teks.

Damodar Das
sumber
11
tidak benar-benar menjawab pertanyaan
cherouvim
2
@cherouvim, saya tidak mengerti mengapa Anda memberikan suara untuk jawaban ini? Sudahkah Anda membaca pertanyaan di atas? Tolong jangan memberikan jawaban komentar yang salah tanpa memahami apa pun!
Mahbub
3
@ Mahbub: Saat ini jawaban ini mendapat 3 suara negatif karena tidak menjawab pertanyaannya.
cherouvim
Tidak menjawab pertanyaan.
Mike Devenney
1
Yah saya sedang mencari apa & # 13; maksudnya dan jawaban ini membantu saya, jadi jangan merasa buruk, semua informasi adalah informasi yang baik dan membantu orang keluar secara acak :)
jackrabbithanna
6

Tampaknya, menurut spesifikasi HTML5 , properti nilai dari elemen textarea harus mengembalikan '\ r \ n' untuk baris baru:

Elemen nilai didefinisikan sebagai nilai baku elemen dengan transformasi berikut diterapkan:

Ganti setiap kemunculan karakter "CR" (U + 000D) yang tidak diikuti dengan karakter "LF" (U + 000A), dan setiap kemunculan karakter "LF" (U + 000A) yang tidak diawali dengan "CR" ( U + 000D), dengan string dua karakter yang terdiri dari pasangan karakter U + 000D CARRIAGE RETURN "CRLF" (U + 000A).

Mengikuti tautan ke 'nilai' memperjelas bahwa ini merujuk ke properti nilai yang diakses di javascript:

Kontrol bentuk memiliki nilai dan pemeriksaan. (Yang terakhir hanya digunakan oleh elemen masukan.) Ini digunakan untuk menjelaskan bagaimana pengguna berinteraksi dengan kontrol.

Namun, di kelima browser utama (menggunakan Windows, 27/11/2015), jika '\ r \ n' ditulis ke textarea, '\ r' dihilangkan. (Untuk menguji: var e = document.createElement ('textarea'); e.value = '\ r \ n'; alert (e.value == '\ n');) Ini berlaku untuk IE sejak v9. Sebelumnya, IE mengembalikan '\ r \ n' dan mengubah '\ r' dan '\ n' menjadi '\ r \ n' (yang merupakan spesifikasi HTML5). Jadi ... saya bingung.

Agar aman, biasanya cukup menggunakan '\ r? \ N' dalam ekspresi reguler, bukan hanya '\ n', tetapi jika urutan baris baru harus diketahui, pengujian seperti di atas dapat dilakukan dalam aplikasi.

barncat
sumber
Dari halaman yang sama, bukankah nilai yang diperoleh melalui JS disebut nilai API?
Anshul
@Anshul - Saya mengerti apa yang Anda maksud. Pertanyaan aslinya adalah "Saat ini, mengirim dari google chrome, ketika saya melihat nilainya, saya merasa nilainya menggunakan \ r \ n untuk baris baru ..." Jadi, karena sedang "dikirim", saya kira nilainya sedang dibaca server. Saya berasumsi itu dengan JS. Bagaimanapun, semoga fakta yang saya posting ada gunanya. Terima kasih atas komentar Anda.
Kucing kucing
@brancat, saya pikir bahasa server seharusnya tidak menjadi masalah di sini. Spesifikasi HTML5 sangat jelas pada 2 hal untuk a textarea. 1. Badan Permintaan hanya akan memiliki \ r \ n 2. Nilai JS hanya akan memiliki \ n terlepas dari apakah Anda menggunakan \ r, \ r \ n, atau \ n saat mengetik. Ini juga cocok dengan temuan Anda dengan IE9 +.
Anshul