Bir metin alanındaki yeni bir satırı temsil eden karakter


88

Sadece hızlı bir tane, ancak çapraz platform varyasyonlarını yakaladığımdan emin olmak istiyorum.

Bir metin alanına girilen yeni satırları [virgül] 'e dönüştürmeyi seviyorum, böylece çıktı tek bir satırda temsil edilebilir, sorum ...

Şu anda google chrome'dan gönderirken değeri görüntülediğimde \r\nyeni satırlar için kullandığını görüyorum . Değiştirirsem \r\n, Windows 7'de Chrome için çalışacağını biliyorum, ancak diğer platformlar hakkında, başka hangi tarayıcıların bir metin alanına yeni bir satır olarak ekleyeceğine ilişkin varyasyonlar var mı?


3
basitleştirmek için: Tüm tarayıcılar, bir metin alanına girilen yeni bir satırı temsil etmek için her zaman yalnızca '\ r \ n' gönderebilir mi (Değeri programlı olarak oluşturmuyorum, yalnızca tarayıcılarında kullanıcı tarafından oluşturulmuştur)
Ninjanoel

Yanıtlar:


106

HTML belirtimlerine göre, tarayıcıların kullanıcı girdisindeki satır sonlarını CR LF ( \r\n) olarak standartlaştırması gerekir ve hiçbir tarayıcının bunu yanlış anladığını düşünmüyorum. Referans: madde 17.13.4 HTML 4.01 spesifikasyonundaki form içerik türleri .

HTML5 taslaklarında durum daha karmaşıktır, çünkü bunlar yalnızca form gönderildiğinde sunucu tarafı form işleyicisine gönderilen verilerle değil, tarayıcı içindeki işlemlerle de ilgilenirler. Onlara (ve tarayıcı uygulamasına) göre, textareaeleman değeri üç varyantta mevcuttur:

  1. kullanıcı tarafından girilen, normalize edilmemiş ham değer; CR, LF veya CR LF çifti içerebilir;
  2. satır sonlarının LF'ye normalleştirildiği "API değeri" olarak adlandırılan dahili değer (yalnızca);
  3. İnternet kurallarına göre satır sonlarının CR LF çiftlerine normalleştirildiği gönderim değeri.

5
HTML 5 Spec: 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

Teşekkürler, günümü yaptın! Kafam karışmıştı çünkü osx /
chrome'daki text alanından içerik

3
Başka bir soru, neden metin alanının ".length" değerini aldığınızda, CR LF'yi yalnızca bir karakter olarak sayıyor, ancak sunucu tarafında kontrol ettiğinizde (örneğin, PHP strlen ile) iki karakter olacak ...
starikovs

2
@ ComFreek'in yukarıdaki bağlantısı bugün kesildi, şunu kullanın: w3.org/TR/html5/forms.html#the-textarea-element
Glen Mazza

@starikovs, sanırım bu, satır sonlarının LF'ye normalize edildiği "API değeri" adı verilen dahili değerle yanıtlanmıştır (yalnızca); Bölüm. Tek bir karakter (yani \n) olarak gördüğünüz şey, muhtemelen "dahili API" tarafından sağlanan şeydir. Referans yok, bu sadece sağduyuya dayalı varsayımım.
Dmitry Koroliov

12

Tüm platformlarda, tüm metin alanları için web formlarındaki metin alanları hakkında özellikle konuşmak \r\nişe yarayacaktır.

Başka bir şey kullanırsanız, Windows platformlarında kesme ve yapıştırma ile ilgili sorunlara neden olursunuz.

Form gönderildiğinde satır sonları Windows tarayıcıları tarafından standartlaştırılacaktır, ancak formu tarayıcıya şu şekilde gönderirseniz \n , metnin örneğin not defteri ve metin alanı arasında doğru şekilde kopyalanıp yapıştırılmayacağını göreceksiniz.

İlginç bir şekilde, Unix satır sonu kuralına rağmen \n, HTTP, SMTP, POP3, IMAP vb. Dahil olmak üzere çoğu metin tabanlı ağ protokolünde standart hala\r\n . Evet, pek bir anlam ifade etmeyebilir, ancak bu sizin için tarih ve değişen standartlar!


7

- Line Feed and 
 Carriage Return

Bu HTML varlıkları , bir metin alanının içine yeni bir satır veya satır başı ekler.


11
gerçekten soruya cevap vermiyor
cherouvim

2
@cherouvim, neden bu cevaba oy verdin anlayamıyorum? Yukarıdaki soruyu okudunuz mu? Lütfen hiçbir şeyi anlamadan yorumda biraz yanlış cevap vermeyin!
Mahbub

3
@Mahbub: Bu cevap şu anda 3 olumsuz oy aldı çünkü soruya cevap vermiyor.
cherouvim

Soruya cevap vermiyor.
Mike Devenney

1
Ben neyi arıyordum & # 13; o kadar kötü hissetmiyorum, demek ve bu cevap bana yardımcı oldu, tüm bilgiler iyi bilgidir ve :) rastgele zamanlarda dışarı insanlara yardım
jackrabbithanna

6

Görünüşe göre, HTML5 spesifikasyonuna göre textarea öğesinin value özelliği yeni satır için "\ r \ n" döndürmelidir:

Öğenin değeri , aşağıdaki dönüşüm uygulanarak öğenin ham olarak tanımlanır:

Bir "CR" (U + 000D) karakterinin ardından bir "LF" (U + 000A) karakteri gelmeyen her tekrarını ve önünde "CR" ( U + 000D) karakteri, U + 000D TAŞIYICI DÖNÜŞ "CRLF" (U + 000A) karakter çiftinden oluşan iki karakterli bir dizeyle.

"Değer" bağlantısını takip etmek, javascript'te erişilen değer özelliğine atıfta bulunduğunu açıkça gösterir:

Form kontrollerinin bir değeri ve kontrolü vardır. (İkincisi yalnızca giriş öğeleri tarafından kullanılır.) Bunlar, kullanıcının kontrolle nasıl etkileşim kurduğunu açıklamak için kullanılır.

Ancak, beş büyük tarayıcının tümünde (Windows kullanan, 27.11.2015), bir metin alanına '\ r \ n' yazılırsa, '\ r' çıkarılır. (Test etmek için: var e = document.createElement ('textarea'); e.value = '\ r \ n'; alert (e.value == '\ n');) Bu, v9'dan beri IE için geçerlidir. Bundan önce, IE "\ r \ n" döndürüyor ve hem "\ r" hem de "\ n" yi "\ r \ n" ye dönüştürüyordu (HTML5 spesifikasyonudur). Yani ... kafam karıştı.

Güvende olmak için, normal ifadelerde sadece '\ n' yerine '\ r? \ N' kullanmak genellikle yeterlidir, ancak satırsonu dizisinin bilinmesi gerekiyorsa, yukarıdaki gibi bir test uygulamada gerçekleştirilebilir.


Aynı sayfadan JS ile elde edilen değere API değeri denmiyor mu?
Anshul

@Anshul - Ne demek istediğini anlıyorum. Asıl soru, "Şu anda, google chrome'dan gönderiliyor, değeri görüntülediğimde, yeni satırlar için \ r \ n kullandığını görüyorum ..." Yani, "gönderildiği" için, sanırım değer okunuyor sunucu. JS'de olduğunu varsaydım. Her neyse, umarım yayınladığım gerçekler işe yarar. Yorumun için teşekkürler.
barncat

@brancat, bence sunucu dili burada önemli değil. HTML5 spesifikasyonu, bir textarea. 1. İstek gövdesinde yalnızca \ r \ n olacaktır 2. JS değeri, yazarken \ r, \ r \ n veya \ n kullanmanızdan bağımsız olarak yalnızca \ n olacaktır. Ayrıca IE9 + ile bulduğunuza da uyuyor.
Anshul
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.