POST 时 ENTER 从 \n 转换为 \r\n

fop*_*316 6 html javascript post http http-post

我将这个简单的测试页面保存为 page1.html。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <script type="text/javascript">
      function submitForm() {
        alert(escape(document.myform.mytextarea.value));
        return true;
      }
    </script>
  </head>

  <body>
    <form name="myform" action="page2.html" method="post" onsubmit="javascript:return submitForm();">
      <textarea name="mytextarea">xxxyyy</textarea>

      <input type="submit" value="submitForm">
    </form>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

并且这个页面保存为page2.html。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <body>
    Page2.html
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我在 Firefox 下打开 page1.html (我认为版本并不重要,但它是 18.0。Chrome 或 IE 10.0 也有同样的问题)。在单击“submitForm”按钮之前,我在值“xxx”和“yyy”之间按一下 ENTER,如下所示。

HTML 表单

当我单击“submitForm”按钮时,警报会显示“xxx”和“yyy”之间的一个字符,即 \n 编码为“%0A”。

JavaScript 警报

如果我查看 Firebug 发布的内容,我可以看到两个字符“\r\n”编码为“%0D%0A”。

萤火虫开机自检

您能解释一下为什么 \n 在 POST 上转换为 \r\n 以及如何防止这种情况发生?我最小化了我的问题,但这对我来说确实是个问题。

我可以在 MAC OS 上的 Safari 下测试这一点,并且在 POST 时也得到 %0D%0A。

在 IE 8.0 及之前版本中,Javascript 会发出 %0D%0A 警报,并且我在 POST 时收到 %0D%0A,因此 IE 8.0 及之前版本的行为有所不同。

Viv*_*han 1

对于不同的操作系统,换行符的处理方式有所不同。

\r = CR(回车) // 在 Unix 中用作换行符

\n = LF(换行) // 在 Mac OS 中用作换行符

\r\n = CR + LF // 在 Windows 中用作换行符

就文本区域中的数据而言。提交表单后,文本区域内容将按照HTML 规范进行 url 编码:

换行符(如多行文本字段值中的换行符)表示为 CR LF 对,即“%0D%0A”。

我发现了一个相关的SO Question,它解决了换行符和跨平台兼容性方面的类似问题。

就您的问题而言,如果您希望统一处理新行,您可以在文本区域的内容中进行简单的正则表达式替换来解决差异。