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