【问题标题】:Line ending charactor LFs are automatically changed to CRLFs in HTML textarea行结束字符 LF 会自动更改为 HTML 文本区域中的 CR LF
【发布时间】:2018-11-14 10:41:07
【问题描述】:

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

■ 问题:

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

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

■ 重现此的步骤:

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

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

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

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

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

  6. 行结束符全部变成CRLF。

■ P.S. 详情请看截图

  • 左边是3个LF的原文
  • 右边是从textarea复制回来的内容,所有的LF都变成CRLF)
  • 「↓」表示LF
  • 「⏎」表示CRLF

谢谢

【问题讨论】:

    标签: html browser operating-system textarea text-editor


    【解决方案1】:

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

    1. 出现这种行为的原因和原因是什么?

    由于历史原因,元素的值以三种不同的方式归一化,用于三种不同的目的。原始值是最初设置的值。它没有标准化。 API 值是 value IDL 属性中使用的值。它被规范化,以便换行符使用 U+000A LINE FEED (LF) 字符。最后,还有值,用于本规范中的表单提交和其他处理模型。它被规范化,因此换行符使用 U+000D CARRIAGE RETURN U+000A LINE FEED (CRLF) 字符对,此外,如果需要,给定元素的 wrap 属性,插入额外的换行符以在给定宽度处换行文本。

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 2010-12-04
      • 2011-08-06
      • 2013-06-26
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多