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,如下所示。

当我单击“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 及之前版本的行为有所不同。
对于不同的操作系统,换行符的处理方式有所不同。
\r = CR(回车) // 在 Unix 中用作换行符
\n = LF(换行) // 在 Mac OS 中用作换行符
\r\n = CR + LF // 在 Windows 中用作换行符
就文本区域中的数据而言。提交表单后,文本区域内容将按照HTML 规范进行 url 编码:
换行符(如多行文本字段值中的换行符)表示为 CR LF 对,即“%0D%0A”。
我发现了一个相关的SO Question,它解决了换行符和跨平台兼容性方面的类似问题。
就您的问题而言,如果您希望统一处理新行,您可以在文本区域的内容中进行简单的正则表达式替换来解决差异。
| 归档时间: |
|
| 查看次数: |
3978 次 |
| 最近记录: |