【发布时间】:2014-02-19 13:55:42
【问题描述】:
我将这个简单的测试页面保存为 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”。
您能解释一下为什么在 POST 上将 \n 转换为 \r\n 以及如何防止这种情况发生吗? 我尽量减少了我的问题,但这对我来说确实是个问题。
我可以在 MAC OS 上的 Safari 下进行测试,并且在 POST 上也得到 %0D%0A。
在 IE 8.0 及之前的版本下,Javascript 会提示 %0D%0A,而我在 POST 时收到 %0D%0A,因此 IE 8.0 及之前的版本表现不一样。
【问题讨论】:
-
根据您的操作系统,换行符可能只用“\n”或“\r”和“\n”表示,尽管这似乎不是问题在这里。
-
ECMA 脚本标准说“\n for newline”,并且 alert 是 ECMA 脚本。 POST 使用“真实”数据,在您的 windows 机器上是“\r\n”,而在 Macbook 上是“\r”,在 Linux 机器上是“\n”。
标签: javascript html http post http-post