我将这个简单的测试页另存为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>

并将此页面另存为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>

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

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

如果我看一下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及更低版本的行为不相同。

最佳答案

解决方案1:

在C#中:

string value = Request.Params["txtValue"].replace("\r\n","\n");

解决方案2:

或者您可以添加隐藏字段,例如:
<input id="txtValue" type="textarea" />
<input id="hiddenTxtValue" type="hidden"/>

并使用encodeUriComponent设置他的值:
$('#hiddenTxtValue').val(encodeUriComponent($('#txtValue').val()));

在C#中:
string value = Request.Params["hiddenTxtValue"];

09-26 20:58