Firefox 和 Chrome 在 POST 期间用 CR+LF 替换 LF

pep*_*psi 5 javascript browser forms post

为什么 Firefox 和 Chrome 在 POST 期间用 CR+LF 替换 LF 字符?

我写了以下作为测试:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.js"></script>
<script type="text/javascript">
function lftest()
{
    var linefeed = "before";
    linefeed += String.fromCharCode(10); //linefeed
    linefeed += "after";
    $("#field").val(linefeed);
    $("#formthing").submit();
}
</script>
</head>

<body>
<form id="formthing" method="post" action="http://someurl.com/resource">
<input type="hidden" id="field" value="" name="line" />
<a href="#" onclick="lftest()">send</a>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

开发者工具网络选项卡显示 POST 数据:

before%0D%0Aafter
Run Code Online (Sandbox Code Playgroud)

pep*_*psi 3

事实证明,这与 x-www-form-urlencoded 编码类型有关。根据规范

非字母数字字符将替换为“%HH”、一个百分号和两个表示字符 ASCII 代码的十六进制数字。 换行符表示为“CR LF”对(即“%0D%0A”)。