To pytanie niepokoi mnie od milionów lat ... za każdym razem, gdy tworzę stronę internetową z obszarem tekstowym, który pozwala na wiele linii (np. „Bio” w profilu użytkownika), zawsze kończy się na pisaniu następującego paranoicznego kodu:
// C# code sample...
bio = bio.Replace("\r\n", "\n").Replace("\r", "\n");
bio = Regex.Replace(@"\n{2,}", "\n\n");
Więc co wysyłają przeglądarki, <textarea name="Bio"></textarea>
jeśli ma wiele wierszy?
html
browser
web-standards
line-breaks
Timothy Khouri
źródło
źródło
<p>
tag.Odpowiedzi:
Specyfikacje HTTP i MIME określają, że wiersze nagłówka muszą kończyć się na \ r \ n, ale nie są jasne (niektórzy twierdzą, że nie jest jasne, czy są jasne), co zrobić z zawartością TEXTAREA. (Zobacz na przykład ten wątek grupy roboczej ds. HTML dotyczący tego problemu).
Oto cytat ze specyfikacji HTTP / 1.1 dotyczący nagłówków wiadomości:
Myślę, że ogólnie jest to dobra strategia: bądź surowa w stosunku do tego, co produkujesz, ale liberalna w tym, co akceptujesz. Powinieneś założyć, że otrzymasz różnego rodzaju terminatory linii. (Zauważ, że oprócz CRLF i LF, Mac OS-9 używał samego CR i wciąż jest ich kilka. Standard Unicode (sekcja 5.8) określa szeroki zakres sekwencji znaków, które powinny być rozpoznawane jako terminatory linii; jest ich lista tutaj .)
źródło
textarea
(czego nie ogranicza specyfikacja lub przynajmniej cytowana przez Teda jej sekcja).textarea
nie są one wysyłane jako pola nagłówka wiadomości.textarea
s zostają zakodowane w treści wiadomości, która jest inna.Wszystkie nowoczesne przeglądarki wysyłają CRLF (
\r\n
). Jednak nie jest to coś, co zostało zadowalająco ustandaryzowane, więc zdecydowanie uznałbym, że warto znormalizować znaki nowej linii w całym wielowierszowym tekście wejściowym.Gdy wartość jest odczytywana przez JavaScript, a nie przesyłana bezpośrednio z formularza, zachowanie przeglądarki różni się. IE i Opera zwracają ciągi znaków z CRLF w; Firefox i WebKit zwracają LF. Zatem każdy formularz, który zostanie przesłany za pomocą pomocy JavaScript / XMLHttpRequest, prawdopodobnie przyjdzie w dowolnej formie.
źródło