HTML textarea 中的行结束字符 LF 自动更改为 CRLF

Line ending charactor LFs are automatically changed to CRLFs in HTML textarea

我注意到如果我将它们放入 HTML 文本区域,所有 LF 都会自动更改为 CRLF。

■‖问题:

  1. 在哪里以及是什么导致了这种行为?

    • 这是因为 Windows 操作系统,即如果使用 MacOS 等不同的操作系统,则不会发生这种情况? (我刚刚在 windows 机器上体验过这个,虽然还没有在 Mac 上测试过......)
    • 或者这取决于浏览器? (我在 Chrome、IE 和 Firefox 上看到过这种行为。尚未在 Safari 上测试...)
    • 或者这只发生在我的编辑器上? (即我正在使用樱花编辑器)
  2. 如果可能的话,如何保存LF不被改成CRLF?

■‖重现步骤:

  1. 找一个可以输入的文本框,例如下面的w3school网站。 https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_textarea

  2. 使用可以检测行结束字符的编辑器准备至少 2 行带有一些 LF 的文本(这样你就可以确保你有一些 LF)。 ※ 以樱花编辑器为例

  3. 将步骤2中准备的文本复制并粘贴到文本区域。

  4. 将文本复制到文本区域后,这次复制文本区域的全部内容。

  5. 将文本区域的内容粘贴回您的编辑器。

  6. 行结束符全部变成CRLF

■『P.S。 详情请看截图

谢谢

我想我至少找到了一些有用的信息,我会留下记录以防有人寻求类似问题的答案。

  1. 在哪里以及是什么导致了这种行为?

For historical reasons, the element’s value is normalized in three different ways for three different purposes. The raw value is the value as it was originally set. It is not normalized. The API value is the value used in the value IDL attribute. It is normalized so that line breaks use U+000A LINE FEED (LF) characters. Finally, there is the value, as used in form submission and other processing models in this specification. It is normalized so that line breaks use U+000D CARRIAGE RETURN U+000A LINE FEED (CRLF) character pairs, and in addition, if necessary given the element’s wrap attribute, additional line breaks are inserted to wrap the text at the given width.

  • 更多信息请阅读: https://www.w3.org/TR/html5/forms.html#the-textarea-element

    1. 如果可能的话,如何保存LF不至于变成CRLF? 我想有很多方法。在提交表单之前使用 javascript 将所有 /r/n 替换为 /n 可能是客户端解决方案。或者如果不需要在客户端处理(这正是我的情况),我会在服务器端执行替换过程以强制将所有行结束字符转换为 LF。