簡體   English   中英

在POST上,ENTER從\\ n轉換為\\ r \\ n

[英]ENTER converted from \n to \r\n on 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>

此頁面保存為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。

HTML表單

當我單擊submitForm按鈕時,警報顯示“xxx”和“yyy”之間的一個字符,即\\ n編碼為“%0A”。

Javascript警報

如果我查看發布的Firebug,我可以看到兩個字符“\\ r \\ n”編碼為“%0D%0A”。

Firebug POST

你能解釋為什么\\ n在POST上轉換為\\ r \\ n以及如何防止這種情況? 我最小化了我的問題,但這對我來說真的很麻煩。

我可以在Safari OS上測試這個,我也在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規范

與多行文本字段值一樣,換行符表示為CR LF對,即“%0D%0A”。

我找到了一個相關的SO問題 ,解決了與換行和跨平台兼容性類似的問題。

就您的問題而言,如果您想要統一處理新行,您可以在文本區域的內容中進行簡單的正則表達式替換以處理差異。

感謝您的信息,我寫了這個函數來計算我的textarea在任何瀏覽器上的“提交”長度:

function getFormURLEncodedLength(myValue) {
  return myValue.replace(/(\r\n|\n|\r)/g, '\r\n').length;
}

解決方案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"];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM