Nur eine kurze, aber ich möchte sicherstellen, dass ich plattformübergreifende Variationen abfange.
Ich konvertiere gerne neue Zeilen, die in einen Textbereich eingegeben wurden, in ein [Komma], damit die Ausgabe in einer einzelnen Zeile dargestellt werden kann, meine Frage ...
Derzeit wird beim Senden von Google Chrome beim Anzeigen des Werts festgestellt, dass er \r\n
für neue Zeilen verwendet wird. Wenn ich ersetze, \r\n
weiß ich, dass es unter Windows 7 für Chrome funktioniert, aber was ist mit anderen Plattformen? Gibt es Variationen darüber, was andere Browser als neue Zeile in einen Textbereich einfügen?
Antworten:
Nach HTML-Spezifikationen müssen Browser Zeilenumbrüche bei Benutzereingaben in CR LF (
\r\n
) kanonisieren , und ich glaube, kein Browser versteht dies falsch. Referenz: Abschnitt 17.13.4 Formularinhaltstypen in der HTML 4.01-Spezifikation.In HTML5-Entwürfen ist die Situation komplizierter, da sie sich auch mit den Prozessen in einem Browser befassen, nicht nur mit den Daten, die beim Senden des Formulars an einen serverseitigen Formularhandler gesendet werden. Entsprechend ihnen (und der Browserpraxis) existiert der
textarea
Elementwert in drei Varianten:quelle
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
), ist wahrscheinlich das, was von der "internen API" bereitgestellt wird. Kein Hinweis, dies ist nur meine Vermutung, die auf gesundem Menschenverstand beruht.Es
\r\n
wird funktionieren, speziell über Textbereiche in Webformularen für alle Textbereiche auf allen Plattformen zu sprechen .Wenn Sie etwas anderes verwenden, verursachen Sie Probleme beim Ausschneiden und Einfügen auf Windows-Plattformen.
Die Zeilenumbrüche werden von Windows-Browsern beim Senden des Formulars
\n
kanonisiert. Wenn Sie das Formular jedoch mit Zeilenumbrüchen an den Browser senden , werden Sie feststellen, dass der Text beispielsweise zwischen Notizblock und Textbereich nicht korrekt kopiert und eingefügt wird.Interessanterweise ist
\n
der Standard in den meisten textbasierten Netzwerkprotokollen, einschließlich HTTP, SMTP, POP3, IMAP usw. , trotz der Konvention zum Ende der Unix-Leitung immer noch\r\n
. Ja, es macht vielleicht nicht viel Sinn, aber das ist Geschichte und sich entwickelnde Standards für Sie!quelle
Es scheint, dass gemäß der HTML5-Spezifikation die value-Eigenschaft des textarea-Elements '\ r \ n' für eine neue Zeile zurückgeben sollte:
Wenn Sie dem Link zu 'Wert' folgen, wird deutlich, dass er sich auf die Werteigenschaft bezieht, auf die in Javascript zugegriffen wird:
Wenn jedoch in allen fünf Hauptbrowsern (unter Windows, 27.11.2015) '\ r \ n' in einen Textbereich geschrieben wird, wird das '\ r' entfernt. (Zum Testen: var e = document.createElement ('textarea'); e.value = '\ r \ n'; alert (e.value == '\ n');) Dies gilt für IE seit v9. Zuvor gab IE '\ r \ n' zurück und konvertierte sowohl '\ r' als auch '\ n' in '\ r \ n' (dies ist die HTML5-Spezifikation). Also ... ich bin verwirrt.
Um sicher zu gehen, reicht es normalerweise aus, '\ r? \ N' in regulären Ausdrücken anstelle von '\ n' zu verwenden. Wenn jedoch die Zeilenumbruchsequenz bekannt sein muss, kann ein Test wie der oben in der App durchgeführt werden.
quelle
textarea
. 1. Der Anforderungshauptteil hat nur \ r \ n 2. Der JS-Wert hat nur \ n, unabhängig davon, ob Sie während der Eingabe \ r, \ r \ n oder \ n verwenden. Es entspricht auch Ihrem Befund mit IE9 +.Diese HTML-Entitäten fügen eine neue Zeile oder einen neuen Zeilenumbruch in einen Textbereich ein.
quelle