Tylko szybkie, ale chcę się upewnić, że łapię odmiany między platformami.
Lubię konwertować nowe wiersze wprowadzone do obszaru tekstowego na [przecinek], aby wynik mógł być przedstawiony w jednej linii, moje pytanie ...
Obecnie, wysyłając z Google Chrome, kiedy widzę wartość, stwierdzam, że używa ona \r\n
dla nowych linii. Jeśli wymienię \r\n
, wiem, że będzie działać dla Chrome w systemie Windows 7, ale co z innymi platformami, czy są różnice w tym, jakie inne przeglądarki wstawią jako nowy wiersz w obszarze tekstowym?
Odpowiedzi:
Zgodnie ze specyfikacjami HTML, przeglądarki są zobowiązane do kanonizacji podziałów wierszy w danych wejściowych użytkownika do CR LF (
\r\n
) i nie sądzę, by jakakolwiek przeglądarka pomyliła się. Odniesienie: klauzula 17.13.4 Typy treści formularza w specyfikacji HTML 4.01.W wersjach roboczych HTML5 sytuacja jest bardziej skomplikowana, ponieważ zajmują się one również procesami wewnątrz przeglądarki, a nie tylko danymi, które są wysyłane do programu obsługi formularzy po stronie serwera, gdy formularz jest wysyłany. Według nich (i praktyki przeglądarek)
textarea
wartość elementu występuje w trzech wariantach:źródło
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
.\n
), jest prawdopodobnie tym, co zapewnia „wewnętrzny interfejs API”. Bez odniesienia, to tylko moje przypuszczenie oparte na zdrowym rozsądku.Mówienie konkretnie o obszarach tekstowych w formularzach internetowych, dla wszystkich obszarów tekstowych, na wszystkich platformach,
\r\n
będzie działać.Jeśli użyjesz czegokolwiek innego, spowodujesz problemy z wycinaniem i wklejaniem na platformach Windows.
Podziały wierszy będą kanonizowane przez przeglądarki Windows po przesłaniu formularza, ale jeśli wyślesz formularz do przeglądarki z
\n
podziałem wierszy, zauważysz, że tekst nie zostanie poprawnie skopiowany i wklejony między na przykład notatnikiem a obszarem tekstu.Co ciekawe, pomimo uniksowej konwencji końca linii
\n
, standard w większości tekstowych protokołów sieciowych, w tym HTTP, SMTP, POP3, IMAP i tak dalej, jest nadal\r\n
. Tak, może to nie mieć większego sensu, ale to dla Ciebie historia i ewoluujące standardy!źródło
Wygląda na to, że zgodnie ze specyfikacją HTML5 właściwość value elementu textarea powinna zwracać '\ r \ n' dla nowej linii:
Podążanie za linkiem do „value” wyjaśnia, że odnosi się on do właściwości value, do której można uzyskać dostęp w javascript:
Jednak we wszystkich pięciu głównych przeglądarkach (w systemie Windows, 27.11.2015), jeśli „\ r \ n” jest wpisane w obszarze tekstowym, znak „\ r” jest usuwany. (Aby przetestować: var e = document.createElement ('textarea'); e.value = '\ r \ n'; alert (e.value == '\ n');) Dotyczy to IE od wersji 9. Wcześniej IE zwracał „\ r \ n” i konwertował zarówno „\ r”, jak i „\ n” na „\ r \ n” (co jest specyfikacją HTML5). Więc ... Jestem zdezorientowany.
Aby być bezpiecznym, zwykle wystarczy użyć „\ r? \ N” w wyrażeniach regularnych zamiast po prostu „\ n”, ale jeśli sekwencja nowej linii musi być znana, w aplikacji można przeprowadzić test podobny do powyższego.
źródło
textarea
. 1. Treść żądania będzie miała tylko \ r \ n 2. Wartość JS będzie miała tylko \ n, niezależnie od tego, czy użyjesz \ r, \ r \ n, czy \ n podczas pisania. Pasuje również do wyników uzyskanych w IE9 +. - Line Feed and Carriage Return
Te encje HTML wstawią nowy wiersz lub powrót karetki do obszaru tekstowego.
źródło