Diese Frage beschäftigt mich seit einer Million Jahren ... Wenn ich eine Website mit einem Textbereich erstelle, der mehrzeilig ist (z. B. eine "Bio" für ein Benutzerprofil), schreibe ich am Ende immer den folgenden paranoiden Code:
// C# code sample...
bio = bio.Replace("\r\n", "\n").Replace("\r", "\n");
bio = Regex.Replace(@"\n{2,}", "\n\n");
Also, was senden Browser für ein, <textarea name="Bio"></textarea>
wenn es mehrere Zeilen hat?
html
browser
web-standards
line-breaks
Timothy Khouri
quelle
quelle
<p>
Tag.Antworten:
Die HTTP- und MIME- Spezifikationen geben an, dass Kopfzeilen mit \ r \ n enden müssen, aber sie sind nicht klar (einige würden argumentieren, dass es nicht klar ist, ob sie klar sind), was mit dem Inhalt einer TEXTAREA zu tun ist. (Siehe zum Beispiel diesen Thread einer HTML-Arbeitsgruppe zu diesem Problem.)
Hier ist ein Zitat aus der HTTP / 1.1-Spezifikation zu Nachrichtenkopfzeilen:
Ich denke, das ist im Allgemeinen eine gute Strategie: Seien Sie streng in Bezug auf das, was Sie produzieren, aber liberal in Bezug auf das, was Sie akzeptieren. Sie sollten davon ausgehen, dass Sie alle Arten von Leitungsterminatoren erhalten. (Beachten Sie, dass Mac OS-9 neben CRLF und LF nur CR verwendet hat und es noch einige davon gibt. Der Unicode-Standard (Abschnitt 5.8) legt eine Vielzahl von Zeichenfolgen fest, die als Zeilenabschluss erkannt werden sollten. es gibt eine Liste von ihnen hier .)
quelle
textarea
(was durch die Spezifikation oder zumindest Teds zitierten Abschnitt nicht eingeschränkt wird).textarea
s werden nicht als Nachrichtenkopffelder gesendet.textarea
s werden in den Nachrichtentext codiert, der anders ist.Alle modernen Browser senden CRLF (
\r\n
). Dies ist jedoch nicht zufriedenstellend standardisiert, so dass ich es auf jeden Fall für sinnvoll halte, die Zeilenumbrüche aller mehrzeiligen Eingabetexte zu normalisieren.Wenn der Wert über JavaScript gelesen wird und nicht direkt aus einem Formular gesendet wird, unterscheidet sich das Browserverhalten. IE und Opera geben Zeichenfolgen mit CRLFs zurück. Firefox und WebKit geben LF zurück. Daher wird jedes Formular, das mit der Hilfe von JavaScript / XMLHttpRequest gesendet wird, wahrscheinlich in beiden Formen vorliegen.
quelle